Git несколько выходов

У меня есть мастер, и я хочу иметь несколько «выходов». Как мне это сделать. Я понятия не имею, возможно ли это с Git.

Пожалуйста, взгляните на этот пример проекта git:

Мастер

  • phpfiles.php
  • config.php
  • plugins
    • a.php
    • б.php
    • c.php

Ветвь А

  • phpfiles.php
  • config.php -> отличается от Мастера
  • plugins
    • a.php

Ветвь Б

  • подпапка1
  • subfolder2*
    • phpfiles.php
    • config.php -> отличается от Мастера
    • plugins
      • c.php

Обратите внимание, что подпапка2* содержит "Мастер" с дополнениями...

Когда я что-то меняю в phpfiles.php в Мастере. Например, на моей локальной машине я иду в Master/phpfiles.php, вношу изменения, а затем применяю эти команды в терминале:

статус git (необязательно)

мастер проверки git (необязательно?)

git добавить . -А

git commit -m «Внес изменение»

git push

Для филиала A: я захожу в эту папку на веб-сервере и/или на локальном компьютере:

git checkout Филиал A

мастер происхождения git pull

--

Для филиала B: я захожу в эту папку на веб-сервере и/или на локальном компьютере:

git checkout Ветвь B

мастер происхождения git pull

Это правильный обходной путь для достижения этой цели? Любая помощь высоко ценится!

--

Мои шаги:

Я сделал это с нуля, создал новую папку:

git инициировать

git удаленное добавление источника https://**@bitbucket.org/*/*.git

git fetch && git checkout BranchB

git merge --strategy=наш источник/мастер

-> Я получаю: Уже обновлено.

ls

-> Я получаю:

  • подпапка1

  • подпапка2

Затем я попытаюсь «получить» измененный файл вручную от мастера, который должен находиться в подпапке2, поэтому:

git checkout origin/master -- изменено.php

ls

-> я получаю:

-подпапка1

-подпапка2

-changed.php


person Marcuzzz    schedule 13.05.2014    source источник
comment
Привет @ user3632342 - что ты понимаешь под разными выводами? Какую проблему вы хотели бы решить?   -  person Florian Neumann    schedule 13.05.2014
comment
Проблема в том, что изменения, которые я делаю в мастере, должны быть сделаны в филиалах A и B. На данный момент я не могу сделать это с Git (вручную, конечно, я мог бы это сделать...)   -  person Marcuzzz    schedule 13.05.2014


Ответы (2)


Если ветвь A и ветвь B могут быть созданы по рецепту из мастера, у вас есть несколько целевых файлов makefile, а не несколько ветвей. Если make слишком тяжеловесен, может подойти специфические ветки включения в этот ответ. Помните, что имена веток являются полностью локальными, для каждого репо. С такой настройкой вы можете использовать checkout в качестве бедняка, например. checkout -B config-set-A, чтобы перенастроить текущий рабочий каталог с новым набором конфигураций.

person jthill    schedule 13.05.2014
comment
Я не видел ваш скрипт на stackoverflow.com/a/20087076/6309. Впечатляющий. Проголосовал. - person VonC; 13.05.2014

Вам не нужно выполнять push/pull для распространения изменений из одной ветки (master) в другие ветки (branchA, branchB).
Вы можете использовать только локальные операции git. Нет необходимости использовать вышестоящее удаленное репо.

Вы также можете:

Таким образом, второе слияние будет включать только ту фиксацию, которую вы только что сделали в master, вместо того, чтобы пытаться добавить все из master.

person VonC    schedule 13.05.2014
comment
@user3632342 user3632342 уверен: после git init в только что созданном локальном пустом репо нет зарегистрированного удаленного устройства, поэтому git fetch может только завершиться ошибкой. Если вы хотите инициализировать контент из удаленного репозитория, вы должны сначала добавить его URL-адрес git remote add origin /url/of/remote/repo. Затем git fetch (точнее git pull origin master для того, чтобы инициализировать рабочее дерево). - person VonC; 13.05.2014
comment
Хорошо, еще один вопрос: я сделал это с нуля, создал новую папку: git init git remote add origin https://****@bitbucket.org/***/***.git git fetch && git checkout BranchB git merge --strategy=ours origin/master ->Я получаю: Уже обновлен. ls я получаю: - subfolder1 - subfolder2 Я вручную получаю измененный файл от master, который должен быть вложен в subfolder2: git checkout origin/master --changed.php - person Marcuzzz; 13.05.2014
comment
@ user3632342 сначала создайте локальный master из удаленного master после вашего git fetch (git checkout -b master origin/master). branchA и branchB уже присутствуют в удаленном репозитории BitBucket? - person VonC; 13.05.2014
comment
Да A&B присутствуют в удаленном репо - person Marcuzzz; 13.05.2014
comment
@user3632342 user3632342, затем создайте их также локально перед попыткой слияния/фиксации. git checkout -b branchA origin/branchA... - person VonC; 13.05.2014