Git Workflow и выпуск веток: много, один или нет? - PullRequest
9 голосов
/ 02 декабря 2011

Для нашей веб-разработки у нас есть ежедневные или еженедельные развертывания.Есть случаи, когда мы внедряем что-то в QA, но они не удосуживаются протестировать это в течение нескольких дней, а затем у нас есть исправление или новое усовершенствование, которое нужно выпустить.Два вопроса:

(1) Каков будет хороший рабочий процесс для этого?

(2) Каковы преимущества и недостатки наличия одной непрерывной, долгоживущей ветви, называемой производством или выпуском, какв отличие от новой ветки релиза для каждого релиза, или просто делать все из мастера и соответствующим образом помечать его?Опять же, это для веб-разработки с частыми выпусками, которые могут быть скопированы.

Ответы [ 4 ]

12 голосов
/ 02 декабря 2011

Я не совсем уверен, что правильно понимаю вашу проблему, но моя ситуация похожа на вашу, и я использовал (модификацию) следующий подход: http://nvie.com/posts/a-successful-git-branching-model/

Короче говоря, речь идет о двух основных ветвях ( master и development ) и нескольких типах вспомогательных веток ( feature , release и исправления из них). Говоря о вашем случае, вы, вероятно, развернете в QA ваши ветки release , а затем, когда у вас будет исправление, вы сделаете это в ветке hotfix и затем объедините ее с обоими - ветки master и release.

Что касается вашего второго вопроса ... ну, вы знаете, что существует очень много разных мнений о стратегиях ветвления ( пример ...) Я бы сказал, непрерывное производство отлично работает (и это не значит, что у вас не может быть веток релиза для поддержки вашего рабочего процесса).

7 голосов
/ 03 декабря 2011

На моей предыдущей работе мы использовали подход, аналогичный тому, который упоминал @Alexis, с одним основным отличием. Имейте в виду, что мы работали над новой версией какого-то довольно крупного унаследованного программного обеспечения (наша кодовая база состояла из нескольких миллионов строк кода, между Java, flex и COBOL) и провели для нас бета-тестирование с партнером-заказчиком. Релизы проводились раз в две недели, в том числе для потребителя (хотя обычно они на одну версию отстают от последних, так как сначала они проходят QA), и на этой неделе мы должны были провести «тестовый» базовый контроль качества с помощью клиент нашего кода, который был другим разработчиком в компании, а затем выпустил реальный QA.

По сути, мастер был нашей веткой разработки. Если элемент разработки занимал более одного или двух дней, он был завершен в ветви функций, а затем объединен в dev, когда будет готов. Была еще одна «будущая» ветка разработчика, которая была зарезервирована для довольно серьезной работы над новыми функциями (всего, что значительно изменило программу) или серьезного рефакторинга. В какой-то момент это станет основным «dev», когда мы решим, что у нас есть время, чтобы должным образом протестировать и устранить ошибки, или что пришло время представить новые функции и справиться с неизбежной болью:)

Когда пришло время для выпуска, была создана новая ветвь с именем 'release_x', тогда все исправления, пришедшие из QA, были там реализованы и объединены 'up'. Под этим я подразумеваю, что у нас может быть две или три версии в игре одновременно, поэтому у клиента, очевидно, будет самая старая версия, к которой мы могли бы исправить, если бы они нашли showtopper. Это будет сделано в ветви исправлений, выходящей из соответствующего выпуска, которая в какой-то момент будет объединена с этим выпуском и удалена (чтобы вы могли легко увидеть выдающиеся исправления в списке ветвей), а другая сборка будет выполнена и отправлена ​​клиенту. Существовали ветки «исправлений», так что мы могли выбирать, что входило в конкретную сборку, которая функционировала как для выпуска клиента, так и для выпуска разработчика, чтобы избежать потенциально рискованных исправлений для мелких проблем, нарушающих выпуск исправления для showtopper .

Затем это будет объединено с выпуском, который имели ребята из QA, затем оно будет объединено с выпуском, который использовали другие разработчики (всегда последний выпуск из-за их зависимости от наших плагинов и инфраструктуры j2ee для выполнения своей работы). ), затем возвращайтесь в dev, просто чтобы держать все на уровне.

У всех выпусков, находящихся в настоящее время в игре, был свой собственный автоматический цикл сборки в Jenkins, а также ветка dev, с некоторыми автоматизированными функциональными тестами, работающими на более важных (в основном, dev и QA). Каждая сборка добавляла в отчет тег о коммите, который использовался в качестве HEAD, и номер сборки был доступен из программы, чтобы мы могли видеть точно , какую версию использовал репортер ошибок.

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

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

6 голосов
/ 02 декабря 2011

Вы должны определенно

  • сделать выпуск веток
  • вставьте исправления, которые вы сделали после обратной связи QA
  • объединить их обратно с мастером.

Это естественный и эффективный рабочий процесс.

1 голос
/ 09 марта 2017

Мы использовали рабочий процесс Gitflow модель ветвления, которая взята из Vincent Driessen в nvie, как Алексис упомянула выше.

Идея состоит в том, что у вас будет две основные ветви: Разработка и Мастер. Разработчики могут иметь свои собственные ветви функций, которые в конечном итоге объединяются с разработчиками, как только функция будет готова. Когда разработка закончена для функции, вы отключаете ветку релиза от Develop, которая запускает ваш цикл релиза. В этой ветви будет выполнено тестирование, и если в результате появятся какие-либо ошибки, они также будут исправлены в этой ветви, но в эту ветку не будут добавлены новые функции. Когда все довольны выпуском, он объединяется с Master и помечается номером версии. Вы также сливаете его обратно в Develop.

Если в рабочем коде обнаружена ошибка, вы разворачиваете новую ветку Hotfix от Master. Как только исправление завершено, вы объединяете Hotfix с Master. Если исправление было создано в течение цикла выпуска, вы в противном случае объедините его с выпуском в разработку.

без исправления:

Функция -> Разработка <=> Релиз -> Мастер

с исправлением во время цикла выпуска:

Функция -> Разработка <=> Выпуск <- Исправление <=> Мастер '

с исправлением после цикла выпуска:

Функция -> Разработка <- Исправление <=> Master '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...