Для команды среднего и большого размера вам, скорее всего, понадобится централизованное хранилище с «официальной» веткой master
.
Другой популярный вариант - иметь интегратора, который в основном является посредником между разработчиками и центральным репо. То, как вы решите это, зависит от того, что ваша команда решит, является наиболее подходящим методом. В Pro Git book .
есть отличная информация о различиях.
Начиная с общего репо, все сводится к личным предпочтениям разработчиков (и некоторым групповым соглашением), фиксировать ли их непосредственно в локальном master
или использовать отдельную ветку dev
. Я думаю, что сохранение локальных изменений в ветке dev
является лучшим вариантом, но немного более обременительным для разработчиков, которые привыкли к централизованному SCM.
Преимущество отдельной ветви dev
заключается в том, что она упрощает отслеживание новых коммитов в базе кода, просто запустив git pull
на master
. Чистый мастер позволяет разработчикам всегда проверять последний открытый код, если это необходимо. Если вы pull
с изменениями в master
, он объединится в ветке origin/master
с вашими неопубликованными коммитами. Это создаст новый коммит слияния в master
и будет видимым, если изменения когда-либо будут возвращены к master
. Может быть, это то, что вы хотите, но это может сделать историю коммитов несколько беспорядочной.
С веткой dev
вы можете легко сделать ребаз против master
, чтобы сохранить историю коммитов линейной. Без dev
ответвления git pull --rebase
в master
будет иметь тот же эффект, но этот шаг легко забыть.
По сути, использование частной ветви отслеживания (например, dev
) дает разработчику немного больше гибкости в том, как она принимает публичные изменения в своих локальных ветвях. Это также облегчает защиту централизованного репо от чрезмерных слияний. Единственным недостатком является то, что это требует некоторых дополнительных усилий от разработчиков, но в долгосрочной перспективе улучшит конечное использование git.