Когда я использую ветви функций, мне нравится сохранять тот факт, что функция была разработана в ветви после слияния. Это делает просмотр истории намного проще. Он группирует изменения по функциям или ошибкам и позволяет узнать самую важную вещь: почему было сделано изменение.
Именно поэтому при слиянии я намеренно отключаю ускоренную пересылку с помощью git merge --no-ff
. Это сохраняет структуру отрасли в истории. Затем я могу удалить метку ветви (git branch -d branch_name
), точка слияния содержит имя ветви и очистить набор ветвей.
Напротив, при работе с веткой я предпочитаю перебазировать ветку восходящего потока. Это делает историю ветки красивой и чистой, свободной от большого количества слияний и разрешения конфликтов. Как правило, перед слиянием я делаю перебазирование вверх по течению, чтобы упростить работу по интеграции (как автор ветки я могу исправить конфликты и неработающие тесты) и полученного в результате очистителя слияния.
Этот подход сохраняет историю ветвей, в то же время предотвращая засорение старых веток, которые больше не разрабатываются. Это делает визуализацию истории с помощью gitk или GitX очень полезной.
Я согласен с основными пунктами в статье, которую вы связали, так как вы получаете все больше и больше крупных ветвей функций, над которыми работают одновременно, появляется все больше и больше шансов на конфликт и интеграционные проблемы. Изоляция, которая делает их такими полезными, становится пассивом. Одним из решений является отсутствие больших старых ветвей функций. Если вы можете разбить ветвь объекта на более мелкие части, которые можно завершить и интегрировать, то вы избежите этой проблемы. Это часто полезно по многим другим причинам, например, из-за плохого слуха, который должен просматривать код.
Если есть возможность постоянно интегрировать ветвь функций в основную линию, тогда ветвь функций должна иметь полезную, работающую, проверенную, документированную работу. Если это так, то они могут быть нарезаны на свои ветви.
Я свободно признаю, что, может быть, слишком много читаю в этом, но один из, возможно, существенных недостатков в статье заключается в том, что ветви названы по имени people , а не features . Это подразумевает, что каждая ветвь предназначена для «того, над чем работает Джим», а не для «добавления синих виджетов». Это подразумевает ряд проблем развития ...
- функции и филиалы принадлежат частным лицам или командам
- ветви не для дискретных функций
- вместо этого филиалы являются личными игровыми площадками
- без определенной функции, они могут продолжаться и включаться
- разработка ведется в бункерах
- люди не разговаривают друг с другом регулярно
- люди не работают вместе в филиалах
- люди не говорят о своих изменениях до интеграции
Во многом это не техническая проблема, а социальная проблема. Многое из этого может быть решено сильным использованием хорошего трекера, тесно связанного с контролем версий, такого как Github. Основное изменение:
- ветви должны быть для определенных функций
- разработчики должны сообщить о проблеме до того, как уйдет и сделает кучу работы
- никто не "владеет" функцией (хотя они могут нести ответственность за нее)
Этот второй, к сожалению, не одобряется политиками отслеживания ошибок большинства проектов. Желание подготовить патч перед сообщением об ошибке очень сильное.
Хорошее управление филиалами требует хорошей социализации, чему способствует хороший трекер проблем с сильной интеграцией контроля версий и приветливой политикой.