Какой должен быть git workflow для сохранения линейной истории master'a?

Подскажите, пожалуйста, наиболее правильный git workflow при котором бы сохранялась линейная история master'a. Вот то, что я мог придумать.

Правила:
1. В бранч master нельзя коммитить. В него можно только мержить.
2. В процессе разработки есть две роли: (1) простой разработчик и (2) координатор.

Процесс разработки:
1. Разработчик создает ветку topic от ветки master.
2. Пишет код в ветке topic.
3. Периодически выполняет merge из master'а в topic. При этом topic уже становится нелинейным, и это правильно.
4. Как только он закончил разрабатывать код в topic он сообщает координатору, что код готов.
5. Координатор выполняет code review в бранче topic. Если нашел ошибки, он сообщает разработчику и тот исправляет их в бранче topic.
6. Если координатор не нашел ошибок в бранче topic он выполняет rebase topic'а над master, после чего выполняет fast forward merge topic'а в master.
7. Сообщает разработчику, что мерж выполнен и бранч topic можно удалить.

Преимущества:
1. Мы сохраняем линейную структуру бранча master.

Недостатки:
1. После ребейза брача topic координатором он становится невалидным у разработчика. И это мне не нравится.

В общем, вопрос такой. Есть ли более правильный процесс разработки с сохранением линейной структуры master'а?
  • Вопрос задан
  • 4405 просмотров
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Пара вопросов:
1. В бранч master нельзя коммитить. В него можно только мержить.

Если с мастером всё равно работает только координатор, то какая разница, как он будет его пополнять?
3. Периодически выполняет merge из master'а в topic. При этом topic уже становится нелинейным, и это правильно.

А зачем? Почему бы ему самому не ребейзить свою ветку на нужное место мастера или не выдёргивать оттуда нужные коммиты через cherry-pick?

Запрет на ребейз перед мёржем в апстрим, например в линуксе, связан с тем, что код должен быть уже протестирован в топике, и после ребейза его придётся тестировать снова. Кроме того, если в мастере и в топике были конфликтующие изменения, то лучше их зафиксировать в одном месте — в точке мёржа топика, чем размазывать по разным конфликтующим коммитам топика при его ребейзе.
Ответ написан
vvpoloskin
@vvpoloskin
Инженер связи
git add --al
git stash
git pull
git stash apply
git commit -am «comment»
git push

Комитить в только в мастер, ни каких ветвлений. Для 2-3 человек — самое то.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы