Я думаю, что эта статья, «Успешная модель ветвления Git» , очень хорошо известна среди опытных пользователей DVCS.
Я использую в hg
основном, но я бы сказал, что это обсуждение хорошо для любой DVCS.
Наш текущий рабочий процесс заключается в том, что каждый разработчик клонирует мастер репо. Мы пишем код для нашего собственного локального репо, запускаем тесты и, если все идет хорошо, толкают мастера.
Поэтому мы хотим настроить CI-серверы, такие как Jenkins, и улучшить наш рабочий процесс с помощью будущей системы обеспечения (chef, puppet, ansible и т. Д.).
Реальная часть
Хорошо, модель, представленная выше, работает хорошо, но ветви могут сломать CI. Ветвь объекта должна синхронизироваться с источником (согласно статье, это будет development
ветвь), чтобы сделать CI и слияние плавным, верно?
Скажем, Алиса и Боб работают над двумя функциями. Но Алиса закончила на следующий день. Особенность Боба занимает неделю. К тому времени, как Боб закончил, его изменения устарели (возможно, Алиса реорганизовала / переименовала некоторые классы).
Одно из решений - каждое утро разработчики должны master/origin
проверять наличие изменений. Если Алиса зафиксировала, Боб должен вытащить и слиться со своим рабочим пространством, чтобы его ветвь функций была актуальной.
- Это хороший способ?
- Должны ли эти ветви существовать в главном репо (а не в локальном клоне?). Значение, что каждый разработчик должен иметь право коммитировать для главного репо в GitHub / Bitbucket, чтобы они могли создать новую ветку? Или это делается локально?
- Наконец, модель, представленная в статье, должна нарушать CI, если ветви не синхронизированы с
origin/master
. Так как мы хотим делать ночные сборки, должны ли разработчики собирать и объединять данные до того, как они уйдут с работы, и будет ли CI работать в каждой ветви функций?