В git-flow и мастер с несколькими параллельными выпуске-филиалы


мы пытаемся принять успешная модель ветвления Git реализовано git-flow. Теперь мы работаем по крайней мере над двумя выпусками-ветвями, один для последнего стабильного выпуска и один для следующего ("предварительный просмотр") выпуска. Я не понимаю, почему все релизы кажутся "линеаризованными" в мастер и отмеченных там. Почему бы не пометить релизы в их ветвях выпуска? Почему же мастер на всех? Или почему разработки филиала и не использовать мастер за это?

5 63

5 ответов:

в модели git-flow ваша "последняя выпущенная" версия фактически сопоставляется с master, в то время как ваш "предварительный релиз" сопоставляется с git-flow release филиала. Он раздвоен от develop и, наконец, слились в master когда происходит фактический выпуск. Тогда это станет вашим "последним релизом", и вы обычно будете исправлять только ошибки для этого релиза, используя git-flow hotfixфилиалы. Таким образом, ваш master всегда представляет наиболее стабильное состояние вашего последнего выпуска версия.

если вы хотите исправить ошибки для более старых версий или сделать какие-либо другие разработки там, вы будете вилка support ответвление от соответствующего коммита в master (у вас будет все версии, когда-либо созданные там). support ветви все еще экспериментальны (согласно документам) и не очень хорошо документированы. Но как вы можете видеть из командной строки с помощью:

usage: git flow support [list] [-v]
       git flow support start [-F] <version> <base>

эти ветви только что запущены и не предназначены для слияния обратно master, ни develop. Обычно это нормально, так как исправления к "древним" выпускам или функциям, запрошенным клиентами, которые будут реализованы в" древних " выпусках, не могут или не должны возвращаться в master. Если вы все еще думаете, вы хотите перенести исправление в свою основную линию разработки (представленную master и develop), то hotfix, вишня-выберите свои изменения и закончить hotfix.

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

картина довольно, хотя. Объединение всего обратно в master дает четкое представление о выпусках во временном порядке вместо того, чтобы иметь теги версий, разбросанные по всему графику.

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

  1. скажем, мы выпустили версию 1.0.1, а затем добавили функции и выпустили 1.1.0.
  2. мы обнаруживаем ошибку в 1.0.1 и хотим исправить ее в обеих версиях
  3. мы должны добавить 1.0.2 после 1.1.0 в master, а затем непосредственно atfer (или До) также 1.1.1.

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

Я лично думаю, что упомянутый git-поток является чрезмерно сложным.

Если вы используете GitHub попробуйте GitHub flow (как описано Скоттом Чаконом).

это особенно полезно для совместной работы над несколькими функциями, просмотра кода, и вы можете объединить его с вашим решением непрерывной интеграции с помощью Commit Status API.

обновление: есть новый официальный сайт GitHub ™Потока

обновление 2: существует новое официальное (и упрощенное) руководство GitHub для GitHub Flow™:https://guides.github.com/introduction/flow/

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

поэтому я создаю два worktree это означает, что создайте две соответствующие длительные ветви рядом с мастером.

$git worktree add -b version-silver ..\version-silver master
$git worktree add -b version-gold ..\version-gold master

тогда у меня есть:

$git branch
master  # base stuff here
version-silver # some normal features
version-gold # some better features

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

cd master
vim basic.cpp
git add .
git commit -m "my common edit on basic.cpp"
cd ..\version-silver
vim silver.cpp
git add .
git commit -m "my specific edit on silver.cpp"
git merge master # here i get the basic.cpp latest changes for silver project
cd ..\version-gold
git merge master # here i get the basic.cpp latest changes for gold project

конкретные изменения каждой версии будут идти в соответствующей папке, а также, и работы по каждому проекту изолированы и IDE не будет путать.

надеюсь, что это поможет.

основная ветвь всегда должна представлять вашу базу производственного кода, поэтому вы всегда объединяете код обратно в мастер сразу после выпуска продукции.

тегирование используется для" запоминания " точного кода, который вошел в производственный выпуск, чтобы вы могли вернуться позже и проанализировать код, если что-то пошло не так.

с этим теоретически не должно иметь значения, если вы помечаете свой код на ветке выпуска или на главной ветке после слияния обратно в master. Я лично предпочитаю помечать код в ветке выпуска, так как это именно тот код, который вошел в сборку/выпуск (предполагая, что что-то может пойти не так со слиянием).

проблема с концепцией ветви разработки заключается в том, что она однопоточная. Брендан в этой теме упомянул стратегию, которая может быть использована с использованием концепции развития отрасли.