При использовании Git желательно ли использовать ветку master для активной разработки?

32

Во-первых, некоторые из них, мы находимся в процессе перехода всех наших проектных команд на использование git и разрабатываем рекомендации по организации репозиториев, чтобы можно было отслеживать определенные ветви для непрерывной интеграции и автоматическое развертывание на серверах тестирования. В настоящее время разрабатываются две модели:

  1. Большое влияние оказала статья nvie.com об успешном ветвлении с основной ветвью, представляющей наиболее стабильный код, ветвь разработки для передового кода и ветвь интеграции для кода, который готов для тестирования качества.

  2. Альтернативная модель, в которой главная ветвь представляет передовой код разработки, интеграционную ветвь для кода, готового для тестирования QA, и производственную ветвь для стабильного кода, готового к развертыванию.

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

rjzii
источник
1
Мне нравится worfklow, который Скотт Чакон использует для разработки GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764
1
Как описано выше, мне кажется, что это скорее семантическая проблема, чем любая другая организация собирается развивать свои собственные процессы, и в некоторых отношениях имена должны отражать ваш рабочий процесс. Как правило, ключом является то, что где-то вы определяете что-то такое, что «исходный код HEAD всегда отражает состояние готовности к работе». То, что вы решили назвать менее важным, но и git-flow, и рабочий процесс GitHub фокусируются на этом разделении и контроле, когда вы переходите к готовой к работе штуковине
Murph
@Murph - Да, но, поскольку мы делаем это с нуля, я подумал, что было бы лучше более или менее следовать общим правилам, чтобы новые нанятые разработчики не имели крутой кривой обучения из-за необычных внутренних практик.
rjzii
Тогда вы ответили на свой вопрос (-: Если честно, даже задавая вопрос, вы далеко впереди кривой ...
Мерф

Ответы:

33

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

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

Карл Билефельдт
источник
7
+1. И поскольку код «готовый к производству» является важным кодом, он также должен находиться в ветке с именем, подчеркивающим эту важность. «master» в качестве имени ветви по умолчанию, безусловно, не выполняет этот запрос, так как он также используется в любом другом хранилище для любых целей.
Bananeweizen
4
+1. Это реальный ответ. Чтобы подчеркнуть мысль: никто из вашей команды не определил ветку «master», а система git - так. Для чего-то важного придерживайтесь веток, которые определил кто-то в вашей команде.
Трэвис Уилсон
1
Полностью согласен. Хотя мне очень нравится модель git flow ( nvie.com/posts/a-successful-git-branching-model ), единственное, что меня беспокоит, это то, что master строго зарезервирован для релизов, что противоречит интуитивному пониманию.
Бачи
12

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

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

Джоэл Этертон
источник
3
Разве не лучше отслеживать версии по тегам?
Адонис К. Какоулидис
1
@AdonisK .: Я не вижу актуальности вашего вопроса.
Джоэл Этертон