Стратегии рабочих процессов для смягчения конфликтов слияния из тематических веток - PullRequest
7 голосов
/ 10 мая 2011

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

Я подумываю предложить этот довольно простой рабочий процесс: скажем, у меня есть мастер (release) ветка, ветка разработки и тематические ветки от этого.Разные разработчики работают над своими отдельными ветками тем, вытягивая и перемещая эти ветки тем в центральное хранилище так часто, как они чувствуют, что у них есть рабочий код.Периодически, когда этого требует разработчик, сопровождающий (в нашей организации этот человек имеет звание «технический руководитель») объединяется из своей ветви функций в ветку разработки, которая помещается на промежуточный сервер и тестируется, и после этого функциятест завершен, он объединен с мастером и отправлен в производство.

Вот мой вопрос.Должны ли разработчики периодически объединять свои тематические ветки?Это гарантирует, что они ВСЕ будут слиты обратно в dev довольно чисто (или, по крайней мере, обнаружат конфликты раньше, чем смогут выйти из-под контроля).Единственное, что я знаю, что моему менеджеру это не понравится, это то, что они должны работать, чтобы успокоить свой инструмент, а не работать над доставкой кода в проект.Мысли? * * 1005

1 Ответ

3 голосов
/ 11 мая 2011

Мы все знаем, что будут конфликты.Вопрос на самом деле: кто должен разрешать конфликты?

Полезно, если именно тот, кто ближе всего к изменениям, вызвавшим этот конфликт, является тем, кто его устраняет.Если вы позволите сопровождающему разобраться с этим (или другим разработчиком), этот человек может не знать, что такое код.Так что да, разработчики, вероятно, должны отвечать за решение конфликтов слияния.Это компромисс.

Ваша проблема связана с рабочим процессом, и вашему боссу может не понравиться то, что технический руководитель использует свое время для разрешения конфликтов.В остальном эта модель совсем не плохая.Эта роль, которую играет технический руководитель, часто называется «интегратором» и часто включает в себя разрешение конфликтов и означает, что интегратору необходимо знать о коде и много общаться с разработчиками (в git есть и другие инструменты, которые могут упростить этот сценарий).).

То, что вы могли бы сделать, - это позволить разработчикам не выдвигать и не извлекать ветки своих тем с сервера, а вместо этого сохранять ветки своих тем локально и иметь только, например, master и development на сервере.Если они вместо этого отрываются от разработки, объединяют свои вещи, локально разрешают конфликты, а также проверяют локально перед тем, как приступить к разработке.Таким образом, разработчики могут вместо этого ускорить разработку, а технический руководитель может сосредоточиться на разработке тестирования и проводить другие виды тестирования, такие как тестирование производительности и т. Д.

Однако, если вам по-прежнему нужна роль интегратора, есть инструмент под названием git rerere .Это позволяет интегратору периодически объединять ветви, разрешать конфликты, сбрасывать, отменять объединение, и git автоматически записывает, как конфликт был разрешен.Это очень хороший способ минимизировать работу по разрешению конфликтов.Вы можете даже автоматизировать это с помощью git hook, например, выполнить слияние со скриптом и просто уведомить интегратора, если произошел конфликт.

Некоторое чтение:

http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html

http://gitfu.wordpress.com/2008/04/20/git-rerere-rereremember-what-you-did-last-time/

Приветствия

...