Рабочий процесс git: у каждого есть ветка, или у каждого есть мастер?
При работе с несколькими людьми с Git, это лучше
- для всех, чтобы просто работать в мастере, и слиться между мастерами друг друга, или
- чтобы все работали в своей титулованной ветке?
Как я понимаю, в случае (1), хотя каждый мастер действует как ветвь, ожидается, что все будут объединяться между работой друг друга в основном линейным потоком, в то время как в (2) каждый должен объединять общего мастера. в их ветку и вставьте изменения из их ветви в общего мастера, когда они будут готовы.
Может ли кто-нибудь с опытом работы в средних и крупных командах с git сделать какие-либо комментарии? Что лучше всего подходит для вашей команды? Я предполагаю, что третий вариант - всегда использовать ветви функций вместо веток людей, хотя я вижу, что это в основном та же самая ситуация, что и (2) с точки зрения этого вопроса.
Я полагаю, что как в (1), так и в (2) один человек отвечает за внесение изменений в "официального" мастера. Как это перенесется, если более одного человека будут толкать доступ к официальному мастеру?
3 ответа
Имена ветвей в git являются локальными для репозитория. push
а также pull
можно настроить на совпадение идентичных имен в удаленном репозитории, но это необязательное поведение. Если у вас есть центральное хранилище, вы хотите master
там быть окончательным. То, что отдельные разработчики называют своими рабочими ветвями в своих локальных репозиториях, - дело вкуса. У некоторых будет свой местный master
быть их рабочей веткой, а другие будут использовать одну именованную ветку dev.
Если ваши разработчики в этом разбираются, то действительно разумный способ - использовать функциональные или тематические ветки, чтобы вместо ветки "Работа Майка" у вас была ветка "Работа над функцией автозаменивания", которую можно толкать и обмениваться без всяких усилий. нужно сделать тонну раннего слияния туда и обратно.
DVCS представляет публикацию как отогональное измерение к ветвлению.
Это означает, что ветви в DVCS имеют две роли:
- классический: изоляция кода: вы изолируете историю (список ревизий) кода в ветке
- новый: публикация: вы повторяете свои коммиты из репо в репо.
Git допускает "частные коммиты", то есть вы фиксируете столько, сколько хотите (и тогда вы можете очистить свою историю коммитов).
Если вы сделаете это в master, это не подходит для публикации: поскольку master - это ветвь, видимая по умолчанию при клонировании репо, любой, кто клонирует репо, не получит стабильное состояние, но снимок незавершенного производства.
Частные коммиты означают: коммит в ветках, которые не опубликованы.
Вы можете называть их как хотите.
Любая ветвь, которая должна быть вытолкнута / вытянута, никогда не должна вызываться после имени ресурса (например, 'VonC_branch
'), но всегда после функции или более общей темы управления выпусками (например,'public
','next
','patchV1
',...)
Разница между частными и общедоступными ветвями заключается в истории коммитов, которые вы разрешаете в каждой из них:
- столько коммитов, сколько вы хотите в частной ветке (вам нужно просто назначить правильный комментарий, чтобы упростить повторный заказ в будущем через
rebase --interactive
с!fixup
а также!squash
действия) - "согласованные" коммиты в открытых ветвях (каждый коммит завершен, представляет стабильное состояние, которое по крайней мере компилируется и может быть протестировано, даже если этот тест не пройден)
Например, главная ветвь будет иметь более строгий стандарт (например, "тесты должны пройти)
Поэтому, чтобы решить, как вы будете использовать ветки с Git, вам нужно принять во внимание аспект публикации.
Для команды среднего и большого размера вы, скорее всего, захотите иметь централизованное хранилище с "официальным" master
ветка.
Другой популярный вариант - иметь интегратора, который в основном является посредником между разработчиками и центральным репо. То, как вы решите это, зависит от того, что ваша команда решит, является наиболее подходящим методом. В книге про Git есть отличные сведения о различиях.
В случае с общим репо все зависит от личных предпочтений разработчиков (и некоторых групповых соглашений), следует ли фиксировать их непосредственно в своих локальных репозиториях. master
или используйте отдельный dev
ветка. Я думаю, что сохранение локальных изменений в dev
Ответвление является лучшим вариантом, но немного более громоздким для разработчиков, которые привыкли к централизованному SCM.
Преимущество отдельного dev
ветвь, которая облегчает отслеживание новых коммитов в базе кода, просто запустив git pull
на master
, Чистый мастер позволяет разработчикам всегда проверять последний открытый код, если это необходимо. если ты pull
с изменениями в master
, он сольется в origin/master
перейти на ваши неопубликованные коммиты. Это создаст новый коммит слияния в master
и будет видно, если изменения когда-либо будут перенесены обратно в master
, Может быть, это то, что вы хотите, но это может сделать историю коммитов несколько беспорядочной.
С dev
ветку вы можете легко перебазировать против master
сохранить историю коммитов линейной. Без dev
филиал, а git pull --rebase
в master
будет иметь тот же эффект, но этот шаг легко забыть.
В основном, используя частную ветку отслеживания (например, dev
) дает разработчику немного больше гибкости в отношении того, как она принимает публичные изменения в своих локальных филиалах. Это также облегчает защиту централизованного репо от чрезмерных слияний. Единственным недостатком является то, что это требует некоторых дополнительных усилий от разработчиков, но в долгосрочной перспективе улучшит конечное использование git.