Немедленно.
Ключом является вопрос о том, какова политика для Мастера. С мерзавцем, как правило, политика филиала на Master является работоспособна релиз стабильной. Иногда Master является «основной линией», где ветки создаются и объединяются до слияния с веткой Release. Это два разных ролевых / политических подхода.
Люди часто становятся источником ошибок, чтобы изменить роль или политику филиала на протяжении всего проекта. Разработчику-одиночке легче сообщить об этих изменениях авторам, но старается, чтобы дюжина программистов все поняли: «Мастер сейчас на уровне 1.0, пожалуйста, делайте ветки, а не все настаивают на этом»
Я затронул политический подход выше. Политика Master заключается в том, что это стабильная версия, которую можно собрать . Внесение небольших постепенных изменений в это означает, что у вас нет чего-то стабильного для сборки постоянно. Не регистрировать небольшие изменения идет вразрез с «большим количеством небольших (но полных) проверок», которые, как правило, являются лучшей политикой (и поощряются легким переходом).
С точки зрения ролей вы начали с главной роли, главной роли , выпуска, обслуживания и разработки, а затем некоторые из них указывают на то, что роль разработки и обслуживания переходит к филиалам. Это опять-таки означает изменение в том, что разрешено на мастере, и может ввести в заблуждение участников относительно того, где они находятся. Это также может (немного) запутать историю веток, поощряя большие коммиты, которые означают большие и трудные для понимания слияния.
Ключевые роли и политики в филиалах просты и последовательны с самого начала.
Эту «ветку по изменению политики» можно увидеть в шаблонах ветвления . Идея каждой ветви, имеющей роли, может быть прочитана в Advanced SCM Branching Strategies . Оба они очень хорошо читают.
В основном есть две ситуации, когда вы обычно хотите начать работать с ветками:
когда вы или ваша команда должны запустить новую функцию, которая имеет малейший шанс не быть добавленной к следующему выпуску (который может быть первым выпуском), тогда начните разработку в отдельной ветви функций
когда вы должны предоставить исправления для серьезных ошибок в последнем выпуске, и вы хотите создать новый выпуск исправлений, содержащий только эти исправления, но не новые разработанные (и, вероятно, нестабильные) функции
Для такого рода решений я думаю, что всегда полезно думать о «новых функциях» или «исправлениях ошибок», начиная с того момента, когда у вас есть первая скомпилируемая / запускаемая версия вашей программы.
В своей знаменитой книге Майкл Фезерс перечисляет четыре причины для изменения , но я бы поставил «оптимизировать ресурсы» в разделе «ветвь новой функции» (для нефункциональной функции) и «улучшение дизайна» в большинстве случаев в разделе «ветка новой функции». Так как ИМХО никогда не следует улучшать дизайн, если он не предназначен для упрощения реализации конкретной функции.
источник
Если вы следуете Git-потоку - и, честно говоря, я думаю, что вы безумны, если вы используете Git и не используете эту модель ветвления - тогда вы никогда не должны делать это,
master
пока вы фактически не будете готовы к публичному выпуску.Ваш первый коммит
master
должен быть пустым хранилищем. Ваш следующий коммитmaster
должен быть коммитом слияния изdevelop
ветви или ветки временного выпуска, и он должен быть стабильным, протестированным и готовым к развертыванию (если это приложение) или общедоступному распространению (если это библиотека).Существуют и другие модели ветвления для Git, но большинство из них основаны на старых централизованных моделях SCM и могут привести к серьезным проблемам в среде DVCS. Вам на самом деле не нужно использовать расширение git-flow, и вам не обязательно нужны все эти ветки release / hotfix / feature, но голыми являются
develop
иmaster
, и нестабильный код входитdevelop
.источник
master
. Помните, чтоmaster
нет ничего особенного для мерзавца, это не должно быть там. Вы можете просто иметь ветку разработки, пока не захотите сделать релиз.Нил Форд из Thoughtworks выступает за использование функции переключения между ветвлениями, чтобы избежать проблемы «слияния ада». Рассмотрим случай, когда два программиста ежедневно покорно сливаются с основной веткой, и один из них вносит значительные изменения в течение нескольких недель, а затем совершает коммиты. Другой программист вполне может оказаться в аду слияния. Чтобы избежать этой проблемы, Ford рекомендует «продвигать боль вперед» (хорошо известный проворный атрибут), имея только одну ветвь и совершая ее ежедневно. Дополнительные функции добавляются с помощью переключателей функций, которые отключают функцию, пока она не будет полностью протестирована.
Эта методология, по-видимому, лучше всего работает в среде, которая реализует непрерывную доставку, поскольку проблемы с фиксацией будут немедленно обнаружены.
источник
Прошло два года с момента последнего ответа на этот вопрос, и я думаю, что теперь история меняется. Для меня ответ: «Всякий раз, когда вы используете контроль исходного кода для отслеживания версий».
Чтобы уточнить, в наши дни отслеживание версий проекта с контролем исходного кода не всегда работает. (например, использование npm для управления зависимостями и определения семантических версий с помощью ^). В этом случае артефакты проекта изменяются каждый раз, когда происходит сборка, и необязательно соответствуют изменениям исходного кода каждый раз. Чтобы справиться с подобными новыми проблемами, некоторые команды предпочитают уже создавать «артефакты», сохраненные в системе управления артефактами (например, JFrog Artifactory) для отслеживания версий проекта.
Очевидно, что когда у вас уже есть управление версиями артефактов, вы не будете извлекать «рабочий код» из ветви GIT и собирать / развертывать в производство, вместо этого вы обращаетесь к системе управления артефактами для непосредственно запускаемых версий для развертывания. В таких случаях понятие «ветвь релиза» внезапно теряет смысл. И всякий раз, когда ваша команда решает не связывать ветку git с версией релиза, фиксация / нажатие непосредственно на master снова становится разумным выбором: она становится веткой по умолчанию при клонировании репо, следовательно, автоматически, учитывая семантику, широко принятую и хорошо проинформированную меняется. Тем не менее, как следует из принятого ответа, вам, вероятно, следует перейти к назначению роли для ветвей, включая master, и использовать эти ветви только для этих конкретных ролей.
И наконец, я иду еще дальше и предлагаю использовать master в качестве ветки разработки в проектах, в которых задействовано лишь несколько основных коммиттеров. Что касается моей команды и, вероятно, то же самое для большинства магазинов микро-услуг. Фиксация на мастере удаляет процесс обмена информацией и потенциально позволяет избежать «ада слияния» при работе с функциями в нескольких спринтах. Более того, код в основной ветке даже не должен «работать», автоматизированный процесс сборки / тестирования скажет вам, что пошло не так, и в любом случае достаточно просто проверить историю git и связаться с автором, который нарушил сборку / тестирование :-)
источник
Я собираюсь занять радикальную позицию: разветвляться на каждую идею. Сначала в git ветки дешевы, основная стоимость ветки - это помнить, для чего она нужна. Я также согласен с тем, что первый коммит для мастера - это кандидат на освобождение. Я рекомендую начать с подтверждения концепции ветки. Когда вы подтвердите свою концепцию, вы можете объединить ее с пустой веткой devel или переписать в зависимости от того, насколько хороша ваша первая попытка. с этого момента вы переходите от devel к каждой ошибке, функции, абстракции и т. д.
источник