Оновлення 2019 року:
У наші дні питання буде розглядатися в контексті використання Git, і 10 років використання розподіленого робочого процесу розвитку (співпрацюючи переважно через GitHub ) показує загальні найкращі практики:
master
це галузь, готова до розгортання у виробництво в будь-який момент: наступний випуск із вибраним набором гілок функцій, об'єднаних у master
.
dev
(або гілка інтеграції, або ' next
') - це те, де гілка функції, обрана для наступного випуску, тестується разом
maintenance
(або hot-fix
) гілка - це поточне виправлення випуску / виправлення помилок, з можливими злиттями назад до dev
та абоmaster
Такий робочий процес (де ви не зливаються dev
з master
, але де ви зливаєте тільки функцію гілка dev
, а потім , якщо обраний, щоб для master
того, щоб мати можливість легко впустити мають філії не готові до наступного випуску) реалізується в Git repo себе, з gitworkflow (одне слово, проілюстроване тут ).
Дивіться більше на rocketraman/gitworkflow
. Історія створення цього процесу на основі магістральних шляхів відзначається в коментарях та обговореннях цієї статті Адама Димітрука .
(Джерело: Gitworkflow : Підручник, орієнтований на завдання )
Примітка. У цьому розподіленому робочому процесі ви можете виконувати будь-коли, коли вам захочеться, і без проблем надіслати на особисту гілку деякі WIP (незавершене виконання робіт): ви зможете реорганізувати (git rebase) свої зобов’язання, перш ніж зробити їх частиною гілки функцій.
Оригінальна відповідь (жовтень 2008 р., 10+ років тому)
Все залежить від послідовного характеру управління випуском
По-перше, чи все у вашому багажнику насправді для наступного випуску ? Можливо, ви дізнаєтесь, що деякі з розроблених зараз функцій:
- занадто складний і все ще потребує вдосконалення
- не готові вчасно
- цікаво, але не для цього наступного випуску
У цьому випадку магістраль повинна містити будь-які поточні зусилля з розробки, але гілка випуску, визначена на початку до наступного випуску, може служити гілкою консолідації, в якій об'єднується лише відповідний код (затверджений для наступного випуску), який потім фіксується під час фази гомологізації, і, нарешті, заморожений, коли він переходить у виробництво.
Що стосується виробничого коду, вам також потрібно керувати своїми гілками патчів , пам’ятаючи, що:
- перший набір патчів може фактично розпочатися до першого випуску у виробництво (це означає, що ви знаєте, що підете у виробництво з деякими помилками, які ви не зможете виправити вчасно, але ви можете розпочати роботу над цими помилками в окремій гілці)
- інші гілки пластирів матимуть розкіш, починаючи з чітко визначеної виробничої етикетки
Якщо мова йде про гілку розробок, у вас може бути один стовбур, якщо ви не докладете інших зусиль з розробки, паралельно таких як:
- масовий рефакторинг
- тестування нової технічної бібліотеки, яка може змінити спосіб виклику речей в інших класах
- початок нового циклу випусків, де необхідно внести важливі архітектурні зміни.
Тепер, якщо ваш цикл розробки-випуску дуже послідовний, ви можете просто піти так, як підказують інші відповіді: один стовбур і кілька гілок випуску. Це працює для невеликих проектів, де всі розробки, безумовно, перейдуть до наступного випуску, і можуть просто бути замороженими і служити відправною точкою для відділення релізу, де можуть відбуватися патчі. Це іменний процес, але як тільки у вас є складніший проект ... цього вже недостатньо.
Щоб відповісти на коментар Віль М.:
- майте на увазі, що відділення dev не означає «одну гілку на розробника» (що спричинить «злиття божевілля», оскільки кожен розробник повинен був би злити роботу інших, щоб побачити / отримати свою роботу), а одну гілку розробників на розробку зусилля.
- Коли ці зусилля потрібно об'єднати назад у магістраль (або будь-яку іншу "головну" або випускну гілку, яку ви визначаєте), це робота розробника, а не - повторюю, НЕ - менеджера SC (який би не знав, як вирішити будь-яке конфліктне злиття). Керівник проекту може контролювати злиття, тобто переконайтесь, що він починається / закінчується вчасно.
- кого б ви не вибрали для злиття, найважливішим є:
- мати тестові одиниці та / або середовище складання, в яких можна розгорнути / протестувати результат злиття.
- визначити тег до початку злиття, щоб мати можливість повернутися до попереднього стану, якщо злиття виявиться занадто складним або досить довгим для вирішення.