Каков правильный рабочий процесс git для моей команды?

Отказ от ответственности: я не знаю много о слиянии или ребазинга. Я использую merge, потому что это эффект по умолчанию git pull.

Я нахожусь в команде инженеров-программистов, которая проходит периоды интенсивного тестирования и крайних сроков, а также периоды менее интенсивных экспериментов и исследований. Вот краткий обзор этапов:

Этап 1 (исследование): каждый инженер работает в своей собственной ветви и периодически сливает свою ветвь в главную ветвь при достижении хорошей остановки, например, когда новая функция завершена. Если функция не может быть полезной, то она удаляется (слияние не происходит).

Этап 2 (комбинат): инженеры более тесно работают в основной отрасли, пытаясь подготовить продукт к сроку. Еженедельные демонстрации обычны.

Фаза 3 (паника): ~2 недели, предшествующие крайнему сроку, обычно довольно интенсивны. Краткосрочные хаки распространены, и многие из изменений, внесенных на этом этапе, должны быть отменены или пересмотрены после истечения срока.

Этап 4 (рефлексия): вскрытие происходит после истечения предельного срока, и изменения, внесенные в ходе этапа 3, либо интегрируются, выбрасываются, либо рефакторизуются.

В настоящее время наша команда строго использует слияния вместо перебазирования. Однако при очистке в Фазе 4 может оказаться полезным использовать ребазинг в Фазе 3. Например, мы не можем выполнить интерактивный перебазирование на этапе 4, потому что, когда мы пытаемся сделать это, мы в конечном итоге бомбардируются конфликтами слияния на всем протяжении процесса перебазирования. Мы обычно используем git revertдля «удаления» нежелательных коммитов из фазы 3.

Я имею в виду работу в отдельных ветвях во время фазы 1, используя rebase для вытягивания master в ветви объектов и слияние для вытягивания объектов в master. Я не уверен в правильности рабочего процесса для фаз 2 и 3, но в конечном счете я хотел бы иметь возможность запускать интерактивную ребазу в Фазе 4 и не быть пораженным конфликтом слияния каждый раз, когда коммит воспроизводится.

Вопрос 1: существует ли рабочий процесс, который моя команда может выполнить для фаз 2 и 3, который позволит нам выполнить бесшовную интерактивную ребазу в Фазе 4, чтобы удалить и раздавить старые коммиты легко?

Вопрос 2: Правильно ли использовать отдельные ветви в Фазе 1, где мы переназначаем master на ветви объектов и объединяем ветви объектов в master, когда разработка объектов завершена?

1 ответ

  1. Мы используем «раздвоение» рабочий процесс, который также описан на сайте Atlassian с GitHub. Atlassian link также исследует другие 3 основных стиля рабочего процесса git.

    Я чувствую, что раздвоение рабочего процесса масштабирует лучшее и сохраняет сложность до минимума в нашей среде. Мы используем ветвь «мастера» для чего в продукции и «развитии» для чего в QA. Мы используем GitHub PRs (pull requests) как место, чтобы поговорить о предлагаемых изменениях, плюс у нас есть TeamCity (build test server), подключенный к PR-системе.