В git-flow и мастер с несколькими параллельными выпуске-филиалы
мы пытаемся принять успешная модель ветвления Git реализовано git-flow. Теперь мы работаем по крайней мере над двумя выпусками-ветвями, один для последнего стабильного выпуска и один для следующего ("предварительный просмотр") выпуска. Я не понимаю, почему все релизы кажутся "линеаризованными" в мастер и отмеченных там. Почему бы не пометить релизы в их ветвях выпуска? Почему же мастер на всех? Или почему разработки филиала и не использовать мастер за это?
5 ответов:
в модели git-flow ваша "последняя выпущенная" версия фактически сопоставляется с
master
, в то время как ваш "предварительный релиз" сопоставляется с git-flowrelease
филиала. Он раздвоен отdevelop
и, наконец, слились вmaster
когда происходит фактический выпуск. Тогда это станет вашим "последним релизом", и вы обычно будете исправлять только ошибки для этого релиза, используя git-flowhotfix
филиалы. Таким образом, ваш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.0.1, а затем добавили функции и выпустили 1.1.0.
- мы обнаруживаем ошибку в 1.0.1 и хотим исправить ее в обеих версиях
- мы должны добавить 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. Я лично предпочитаю помечать код в ветке выпуска, так как это именно тот код, который вошел в сборку/выпуск (предполагая, что что-то может пойти не так со слиянием).
проблема с концепцией ветви разработки заключается в том, что она однопоточная. Брендан в этой теме упомянул стратегию, которая может быть использована с использованием концепции развития отрасли.