Джон Перді має правильну ідею. git flowполегшує і власне управління цими філіями, і управління філіями є аргументом для переходу git.
Почнемо з базового проходу git, оскільки ви приїжджаєте з точки зору svn-to- git. Розглянемо gitнаступне:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Вище, ви розгалужується masterв develop(позначеному \), і гілка developдо featureгілки. Ми об'єднуємо ці гілки назад (позначаються /), з комірами ( -) вздовж гілки. (Якщо немає коміту, але злиття - це шлях праворуч, є .індикатори, які показують, що наступним -є наступне виконання).
Досить просто. Що робити, якщо у головному випуску у нас є виправлення?
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коміти мають проблеми зі складанням або тестовими помилками, оскільки вони залишаться без тегів.