Вам может пригодиться рабочий процесс, описанный Скоттом Чаконом в Pro Git . В этом рабочем процессе у вас есть две ветви, которые всегда существуют: master и develop .
master представляет собой наиболее стабильную версию вашего проекта, и вы можете развертывать ее в производственной среде только из этой ветки.
develop содержит изменения, которые находятся в процессе и не обязательно могут быть готовы к производству.
В ветке develop вы создаете тематические ветки для работы над отдельными функциями и исправлениями. Когда ваша функция / исправление будет готово к работе, вы объединяете его в develop , после чего вы можете проверить, как оно взаимодействует с другими тематическими ветками, в которые объединились ваши коллеги. После того, как develop находится в стабильном состоянии, объедините его с мастером . Развертывание в производственную среду с мастера всегда должно быть безопасным.
Скотт описывает эти давно работающие ветки как «разрозненные» фрагменты кода, где код из менее стабильной ветки в конечном итоге «переходит» в более стабильную после тестирования и общего утверждения вашей командой.
Пошагово ваш рабочий процесс в рамках этой модели может выглядеть следующим образом:
Дополнительные сведения об этом рабочем процессе см. В главе Ветвящиеся рабочие процессы в Pro Git.
В VCS наличие только «главной» ветви быстро показывает ее ограничения, потому что вы не можете проводить все усилия по разработке одновременно в одной ветке.
Это означает, что вам нужно знать , когда переходить .
Но в DVCS (как в «Децентрализованной» VCS) у вас также есть проблема публикации , с ветвями, которые вы сохраняете локальными по отношению к своим репозиториям, и ветвями, которые вы отправляете или извлекаете из них.
В этом контексте начните с определения ваших одновременных усилий по разработке и выберите процесс публикации (push / pull). Например (и это не единственный способ):
Существуют и другие процессы управления выпуском, о чем свидетельствует этот вопрос SO .
Прочтите рабочий процесс ReinH Git для Agile-команд здесь: http://reinh.com/blog/2009/03/02/a-git-workflow-for- agile-team.html
Это очень хорошо работает для небольших команд. Цель здесь - убедиться, что все, что может быть потенциально нестабильным, попадет в какую-либо ветку. Выполняйте слияние с мастером только тогда, когда вы готовы к использованию всеми, кто работает за пределами функциональной ветки.
Примечание: эта стратегия вряд ли специфична для git, но git упрощает ее реализацию.