У Джона Перди правильная идея. git flowтакже упрощает фактическое управление этими филиалами, а управление филиалами является аргументом для перехода к git.
Давайте начнем с основным выбегом git, так как вы пришли с svn-До- gitточки зрения. Учтите gitследующее:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Выше вы переходите masterна develop(обозначается \) и переходите developна featureветку. Мы объединяем эти ветви обратно (обозначается /) с помощью commits ( -) вдоль ветви. (Если коммита нет, но слияние направо, есть .индикаторы, показывающие, что -следующий коммит следующий).
Достаточно просто. Что если у нас есть исправление в нашем основном выпуске?
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
Выше, developразветвленный от master. Обнаруженная ошибка masterбыла исправлена путем ветвления master, исправления и слияния с master. Затем мы слились masterв develop, а затем developвfeature2 , который свернул новый код из hotfixэтих веток.
При слиянии feature2обратно develop, его история включает в себя developс hotfix. Аналогично, developобъединяется feature2с новым кодом из master, так что объединение с developобратно masterбудет происходить без проблем, так как оно основано на этом коммите в masterто время - как если бы вы разветвились с masterэтого момента.
Так вот еще один способ сделать это.
master--..........-........-
\ /\ /
---1.0-- --1.1--
Ваши 1.0 релизы получить tagged- 1.0.1, 1.0.2, 1.0.3и так далее.
Теперь вот хитрость: вы обнаружили ошибку в 1.0, и она затрагивает 1.1, 1.2 и 1.3. Чем ты занимаешься?
Вы отключаете свой последний или самый ранний поддерживаемый выпуск и исправляете его. Затем слить свой новый hotfixфилиал в 1.3й в 1.2, 1.1и 1.0. Не переходите от каждой ветки версии обслуживания; не сливаются 1.0в masterили сливаться masterобратно в 1.0. Возьмите одну hotfixветку и объедините ее со всеми ветками вашей версии. Если будут конфликты, это скажет вам; проверьте ваш код, чтобы убедиться, что изменения верны ( git diffэто ваш друг).
Теперь это конкретное изменение применяется везде. Род разветвленный, но все в порядке. Это не случайно. Тег в 1.3голову, 1.3.17, объединить его в каждый прогресс особенность-в-разветвленного с 1.3, и двигаться дальше.
git flowРасширение помогает управлять этим обслуживание, функцией и ветвью исправлений для вас. Как только вы отключите рабочий процесс, это будет тривиально и избавит вас от проблем с управлением исходным кодом.
Я видел, как это делалось в командах программистов, но я сам не работал так глубоко как программист, так что я все еще сам разбираюсь в повседневной работе.
gitтег после каждой успешной сборки? Это дает дополнительное преимущество, так как позволяет четкоgitопределить, какие коммиты имеют проблемы со сборкой или неудачные тесты, поскольку они остаются без тегов.