Как избежать слияния с множественными ответвлениями? - PullRequest
1 голос
/ 15 февраля 2012

Я работаю над веб-приложением с командой среднего размера. Мы версионируем / коллективно кодируем этот проект, используя Git. Между моим коллегой и мной, я думаю, мы столкнемся с трудным слиянием, и я хотел бы посмотреть, есть ли что-нибудь, что мы можем сделать лучше, прежде чем столкнемся с неприятностями.

Мы в основном работаем в Git над ветвью разработки:

D-E-F-G

Мой сотрудник создал ветку, чтобы работать над большими изменениями:

     A
    /
D-E-F-G

Затем я потянул эту ветку вниз, исправил в ней некоторые ошибки и собираюсь объединить ее обратно. Тем временем мой коллега создал новую ветку для другой функции:

     A-B-C-D
    /
D-E-F-G-H-I-J
      \
       A-B-C

Теперь мне нужно создать новую функцию, которая использует стили из новой ветки моего коллеги, но его новая ветвь требует гораздо больше работы, прежде чем она может быть объединена с разработкой, поэтому я разветвляюсь из его ветки чтобы воспользоваться его стилями и иметь последовательный взгляд, когда его вещи сливаются обратно в:

     A-B-C-D
    /
D-E-F-G-H-I-J
      \
       A-B-C..
           \
            A

Но нам действительно нужны некоторые из стилей, которые он разработал в своей другой ветке, поэтому я подумываю о перебазировании разработки в мою ветку, как только мы объединяем его другую ветку с разработкой:

     branch 1: A-B-C-D
              /       \
 develop: D-E-F-G-H-I-J..
                 \      \
        branch 2: A-B-C..\
                       \  \
              branch 3: A-B..

Таким образом, моя ветка, над которой мне нужно поработать, будет иметь код, который мне нужен из обеих его ветвей, но будет переведена из разработки, чтобы, надеюсь, уменьшить конфликты. Меня беспокоит то, что он может столкнуться с множеством проблем, когда попытается объединить ветвь 2 с разработкой. Будет ли для него много конфликтов? Есть ли что-то лучшее, что мы можем сделать?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Для этого ответа из вашего объяснения я приму две вещи:

  • develop - это готовая к развертыванию ветка, которая может получать фиксации с исправлениями ошибок и быть развернутой (или выпущенной) в любое время.(если вы этого не сделаете, я настоятельно рекомендую вам сделать это: P).
  • У вас есть только два разработчика, разрабатывающих функции.Таким образом, у вас не будет существенных функций в develop ветке.

Итак, я бы посоветовал вам создать ветку с именем feature-integration, которая ежедневно заменяется на develop (или когда у вас есть изменения в ветке develop).Затем, когда ваш коллега выполняет значительную часть своей работы, он может объединить свой код в ветку feature-integration, и вы можете использовать его при разработке, перенеся feature-integration в вашу рабочую ветку.Вы (и ваш коллега) также должны регулярно обновлять код рабочей ветки (я бы рекомендовал ежедневно или хотя бы раз в неделю) с помощью feature-integration, чтобы обновлять код и разрешать возможные конфликты во время разработки, поэтому выне должно быть болезненного слияния, когда вы решите слить его в develop.

0 голосов
/ 15 февраля 2012

Вы сталкиваетесь с проблемами, когда путем слияния вы вносите изменения, которые вы действительно хотите, и те, которые вы не хотите.

Уменьшите свои возможности.

Начните свои функции с общей точки зрения - независимо от того, насколько неуклюже это будет на первый взгляд.

Используйте rerere для облегчения повторного использования.

Это суммировано в моем посте по ветке за функцию:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

...