2012-01-27 7 views
2

У меня вопрос относительно протокола ветвления git. Я начинаю больше знаком с командами git, но я до сих пор довольно новичок в этом процессе.зависимости ветви потока потока git

Я работаю над проектом, основанным на git, с другим человеком. Мы добавляем большую функцию, поэтому мы изолируем нашу работу в «Branch_1». Другой разработчик начал работу над кучей дополнений в вилке Branch_1 под названием Branch_2. Другой разработчик работал над Branch_2, а затем временно перешел к другим задачам. Мне нужно было продолжить и расширить изменения, которые он внес в Branch_2, поэтому я создал Branch_3 на основе Branch_2.

Рисунок 1

Branch_1 
    |_______> Branch_2 (other developer working on) 
       |________> Branch_3 (I'm working on) 

В то время как я работаю на Branch_3, я понимаю, исправлена ​​ошибка, которая должна быть частью всех ветвей, и мне нужно FIX для того, чтобы продолжить разработку Branch_3. (Также, если работа Branch_3 оставлена, FIX должен быть во всех других ветвях независимо).

Итак, моя мысль - проверить Branch_1, внести изменения для FIX, check_ Branch_2, слить в Branch_1, затем проверить Branch_3 и объединить изменения из Branch_2. См. Рисунок 2 ниже.

Рисунок 2

git checkout Branch_1 
# make my changes 
git pull origin Branch_1 # to pull in any other changes 
git push origin Branch_1 

git checkout Branch_2 
git pull origin Branch_2 # to pull in any other changes 
git merge --no-ff Branch_1 # merge in branch 1 
git push origin Branch_2 # push to the remote repository 

git checkout Branch_3 
git pull origin Branch_3 # to pull in any other changes 
git merge --no-ff Branch_2 # merge in branch 2 
git push origin Brach_3  # push to the remote repository 

Однако, интересно о нескольких вещах в этом случае:

  1. Есть много шагов, чтобы сделать. Получается много времени спустя. Если я создаю Branch_4 на основе Branch_3 и Branch_5 off Branch_4, еще больше шагов.
  2. Чтобы продолжить работу Branch_3 после создания FIX, я в основном должен выполнить обязательства в Branch_2 моего коллеги, которые он, возможно, не понимает.
  3. Для более сложных установок я не могу переопределить то, что отделилось от чего. Я мог бы исправить ошибку FIX в Branch_1 и объединить ее в своих сотрудников Branch_2, но, возможно, мой сотрудник создал Branch_2, отделив от него какую-то промежуточную ветку, такую ​​как Branch_1a. FIX не был должным образом объединен с Branch_1a в правильном порядке.

Я в основном не согласен с тем, как другие приблизились бы к подобной ситуации. Является ли это правильным мышлением при внесении изменений, которые должны быть в иерархии ветвей?

+1

См. Также http://stackoverflow.com/questions/6596030/whats-your-ideal-branch-architecture-within-git-for-web-applications и его ответы –

ответ

2

К сожалению, да. Если вы хотите интегрировать исправление во все ветви, вам нужно либо сделать его один раз, либо объединить его повсюду, либо сделать исправление несколько раз (поддерживается cherry-pick). Когда вы беспокоитесь о branch2 и что вы совершаете коммиты, о которых не знает ваш коллега, просто опустите branch2. Когда ваш коллега окончательно объединит его обратно в branch1 (это должен быть желаемый результат, потому что секрет успешной работы с филиалами фактически сливается снова), исправление будет автоматически включено. Если он отчаянно нуждается в исправлении, вы можете просто уведомить его, и он может слить его сам.

+0

Спасибо, Бомбе. Хорошо знать, что мне не нужно объединять Branch_1 в Branch_2 и просто объединить его в свой собственный Branch_3. –

+0

Обратите внимание, что если вы привыкли к слиянию с branch2 в branch1, вы * будете * получать конфликты слияния, если фиксации из ветки3 уже были объединены непосредственно в branch1 раньше! –

Смежные вопросы