Це складна проблема, але з якою стикаються багато людей. Я вважаю за краще використовувати налаштування Gitflow як вихідну точку.
Розробка -> Нові речі, над якими працює
Майстер -> Готові речі, які потребують тестування Виробництво -> Речі, які були опубліковані до виробництва.
За незначних (коротших) особливостей я створюю гілку від розвитку, виконую роботу там, потім об'єдную гілку назад у розвиток.
За основними (довгостроковими) ознаками я створюю галузь з розвитку, створюю менші гілки з цієї гілки, а потім зливаюся назад до першої гілки. Після того, як основна особливість буде завершена, повертаємося назад у галузь розвитку.
Через регулярні проміжки часу (залежить від проекту) я зливаю розробку назад у головний і починається цикл тестування. Якщо під час тестування з’являються якісь виправлення, вони робляться у головній гілці (підрозділ потім об'єднується) І розвиток може продовжуватися на головній галузі під час тестування.
У будь-який час майстер повинен бути об'єднаний у розвиток, а розвиток має бути об'єднаний у будь-яку з довгострокових підгалузей.
майстер повинен завжди (теоретично) бути готовим до виробництва. Розвиток повинен завжди (теоретично) бути готовим до виробництва. Єдиною причиною є різниця в тому, щоб забезпечити надійний набір можливостей тестувальників.
Коли буде готово, зобов’язання у майстра, який тестується, об'єднується у виробництво і розгортання у виробництві відбувається з цієї гілки. HOTFIX, які потрібно виконати в надзвичайних ситуаціях, можуть відбуватися у виробничій філії без необхідності об'єднання в головний (що може мати багато неперевірених змін).
Моє звичайне дерево виглядає так
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
Це моє загальне правило, що жодна зміна не повинна тривати більше кількох годин. Якщо це так, то його потрібно внести в менші зміни. Якщо це величезна функція (наприклад, перезапис UI), то це триває в довгостроковій перспективі, щоб нормальний розвиток може продовжуватися в той же час. Філії LongTerm, як правило, є лише локальними філіями, тоді як Development, Master та Production - віддалені гілки. Будь-які підрозділи також є лише локальними. Це забезпечує збереження сховища в чистоті для інших, не втрачаючи корисності git на довгостроковому наборі функцій.
Хочеться зазначити, що існування довгострокової галузі є рідкісною справою. Зазвичай вся моя робота перебуває на стадії розробки. Тільки коли у мене є функція (набір), яка триватиме так довго, що мені також потрібно працювати над звичайними розробниками, я можу використовувати гілку LongTerm. Якщо це просто набір змін, які повинні бути разом, я просто не зливаюся, щоб освоїти, поки там все не буде зроблено.