Является ли ветка разработки бесполезной в git-flow?

Везде, где я ищу правильный способ использования GIT в команде, нас всегда называют git-flow.

Мы начали использовать эту схему как нашу библию в начале:

изображение

Прошло время, и мы, наконец, обнаружили, что сохранение master в качестве стабильной ветки с помеченными коммитами было пустой тратой времени.

Зачем вам ОТМЕЧАТЬ свою стабильную фиксацию, а затем НАЖАТЬ для master той же версии, которую вы уже пометили? Тег существует, вы можете вернуться к этой фиксации в любое время. Почему я должен сохранять эту ветку только для того, чтобы содержать только теги?

Вот поток, который мы используем, и он работает как шарм:

  • Мастер: Это на самом деле наша ветка разработки

  • Релиз: мы создаем ветку релиза, чтобы выполнить наш последний тестовый пример релиза, а затем добавляем исправление, если это необходимо.

  • Функция: мы переходим от мастера, чтобы создать функцию, а затем отправляем запрос на включение в мастер.

На самом деле это то же самое, что и git-flow, только без ветки, содержащей стабильную версию.

Еще одним преимуществом этого является то, что master является ветвью develop. Поэтому, когда в проекте появляется новый товарищ по команде, он может начать с клонирования проекта, и его master уже соответствует фактической разработке.

На изображении:

изображение

Мой вопрос: зачем вам использовать оригинальный git-flow с 5 ветвями, если вы можете управлять только 4 ветвями с одинаковым результатом?


person Christophe Chenel    schedule 08.02.2019    source источник
comment
Вас может заинтересовать рабочий процесс CPython Git. Они используют не develop ветку, а master для разработки и поддерживают ветки для долгосрочного обслуживания нескольких версий параллельно.   -  person Maggyero    schedule 25.09.2019


Ответы (3)


На мой взгляд, у вашего рабочего процесса есть большая проблема: чрезмерное использование ветки разработки/мастера.

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

Предположим, у вас есть стабильная версия вашего кода, и вы уже завершили этап выпуска. Теперь вы считаете, что все готово и создаете тег на master/develop. Через некоторое время ваш клиент заставляет вас заметить, что у вас есть ошибка, и вы не готовы к новой версии. Что вы делаете?

Ваш единственный выбор — переход от master/develop. Таким образом, функции, выпуск и исправления будут выпущены мастером. Другим недостатком этого подхода является то, что как только ошибка будет устранена в ветке исправлений, вы объедините ее в ветке разработки/мастера, но вы не сможете пометить эту фиксацию, потому что ветка разработки/мастера, вероятно, тем временем переместится, и в ней будет больше ( не тестировалось) функции, которые не должны быть у заказчика. Я думаю, что это слишком много, и историю коммитов в какой-то момент будет трудно понять. НО, как я сказал в начале, это спорно.

Ваш рабочий процесс, кажется, смешивает разработку на основе git-flow и магистрали (или мастера), но в основном использует их недостатки.

person Marco Luzzara    schedule 08.02.2019
comment
Я думаю, что этот ответ указывает на самую большую проблему с предлагаемым потоком Вопроса: при объединении Develop и Master невозможно развернуть исправление для ранее выпущенной и помеченной версии, не включая также невыпущенные разработки. - person Kevin Kruse; 08.02.2019
comment
Для моего оперативного исправления, если я извлекаю последний тег (версия, которую я отправил клиенту), то я разветвляю выпуск/версию с оперативным исправлением. Затем в этой ветке я исправляю проблему, отмечая ее. отпустите его и отправьте запрос на включение для Мастера (Моя активная ветка разработки). Похоже, таким образом я обхожу недостаток или упускаю момент. - person Christophe Chenel; 09.02.2019
comment
Если я правильно понял, проблема не устранена: даже с запросом на вытягивание команда development/master может быть не готова создать стабильную версию с вашим исправлением ошибки, особенно потому, что вам нужно закоммитить исправление ошибки в кратчайшие сроки. На самом деле это еще худший выбор, если вы думаете, что создаете узкое место в своем рабочем процессе. В то время как с git-flow у вас могла быть команда develop и команда master, теперь они обе заблокированы из-за необходимости интегрировать ваше исправление ошибки. - person Marco Luzzara; 09.02.2019
comment
В вашем примере, что произойдет, если вам нужно создать второе исправление? Он должен включать изменения из первого исправления, а также новое исправление, но ничего больше из master/develop. Когда первое исправление объединяется обратно через PR, оно в это время объединяется в HEAD разработки/мастера. Таким образом, вы не можете создать второе исправление из первой точки слияния исправлений. - person John Camerin; 10.02.2019
comment
Исправления могут разветвляться от тега, и, поскольку они в конечном итоге сами становятся тегами, процесс для второго или третьего исправления точно такой же. Описанный процесс работает. reallifeprogramming.com/ - person whiskeysierra; 19.08.2020

Результат не тот: в простом git-flow master всегда стабилен — это ваш результат, на который могут положиться люди за пределами вашей команды. Ваш master представляет собой смесь develop и master на языке gitflow. После слияния больших функций ставки не принимаются, действительно ли результат стабилен и готов к отправке, или требуются дополнительные исправления ошибок.

Тем не менее: рабочие процессы Git не даны Богом. Git-flow получил довольно много критиков. Если ваша команда и команды, которые полагаются на ваш код, довольны, используйте рабочий процесс с минимальными накладными расходами.

Последнее примечание:

Вот Git-Flow, который мы используем, и он прекрасно работает.

Пожалуйста, НЕ называйте свой рабочий процесс "git-flow". Выберите явно другое имя. Разбавление хорошего поискового запроса никому не поможет.

person A.H.    schedule 08.02.2019
comment
Я обновлю свой вопрос, чтобы не использовать Git-flow, поскольку это не поток git. еще раз спасибо за ответ! - person Christophe Chenel; 22.01.2020
comment
С методом @ChristopheChenel всегда стабильный код является концом ветвей выпуска. - person Jonathan.; 20.05.2020

Год спустя,

Я, наконец, понимаю необходимость двух отдельных веток в потоке git.

Единственная причина, по которой вам может понадобиться Git-flow, — это когда у вас есть CI/CD с автоматическим развертыванием в рабочей среде через любую фиксацию, которую вы делаете в основной ветке.

В прошлом году, когда я задавал этот вопрос, у нас не было автоматического развертывания в рабочей среде. Таким образом, мы можем считать, что метод, который мы использовали без Develop/Master, был нормальным и сэкономил нам немного времени, так как нам не нужно было управлять еще одной веткой.

Поскольку мы используем конвейерную систему (выпускаем в производство после любой фиксации в основной ветке), это придает этой ветке цель! Да, в ветке master есть тегированная версия, но к ней же прилагается скрипт для авторазвертывания в продакшн!

person Christophe Chenel    schedule 22.01.2020
comment
Слияние с мастером делается по праву человека? Разве тот же человек не мог просто запустить конвейер развертывания в ветке релиза? - person Jonathan.; 20.05.2020
comment
Ваш конвейер может начать развертывание на основе тегов, а не ветки. Ваш исходный рабочий процесс хорош. В этом нет ничего плохого. Основная ветка в git потоке бесполезна. reallifeprogramming.com/ - person whiskeysierra; 19.08.2020