Примітка: моє питання зосереджено на моїй конкретній проблемі (яка стосується Liferay), але я сподіваюся, що вона може бути корисною для всіх, хто потребує підтримки різних версій одного проекту на git.
Я працюю над компанією, яка пише багато плагінів для порталу Liferay . Ці плагіни (портлети, теми тощо) зазвичай використовуються повторно і, звичайно, повинні бути оновлені для нових версій порталу.
Однак зазвичай потрібно перенести, скажімо так, портлет на нову версію Liferay та підтримувати попередню версію. Крім того, часто нам доводиться створювати дуже специфічні налаштування для деяких клієнтів, що не має сенсу додаватися до "основної версії".
Ці реквізити ускладнюють нашу роботу, але, на щастя, ми можемо припустити деякі спрощення. Наприклад, додатки часто оновлюються одночасно лише одним програмістом. Дуже рідко одночасно до плагіна додаються дві або більше функцій.
Тепер ми переходимо до Gitorious . Ми намагаємось розробити модель розгалуження для такого сценарію.
Моя модель
Я запропонував:
- Кожен плагін мав би своє сховище в Gitorious всередині проекту. Наприклад, портлет для відображення кошенят міститиме
kittens-portlet
сховище всерединіliferay-portlets
проекту. - Створюючи новий плагін, створіть його у гілці, названій відповідно до версії Liferay (наприклад,
lf5.2
). - Щоразу, коли оновлюється плагін, оновлення затверджується та розгортається у виробництві, тегніть плагін за допомогою версії (наприклад
lf5.2v1
,lf5.2v2
тощо) * - Кожен раз, коли плагін повинен бути перенесений на нову версію Liferay, ми розгалужуємо останню версію (створюючи, наприклад, гілку
lf6.0
). - Отримавши виробництво, керівник нової філії отримає такий тег, як
lf6.0v1
. - Кожен раз, коли нам доводиться налаштовувати плагін, орієнтований на конкретний клієнт, ми створюємо гілку з іменем клієнта (наприклад, ми створимо гілку
lf5.2clientcorp
для нашого клієнта "ClientCorp Inc.")
Це незвичайна модель: у неї не було б master
і безліч гілок, що не зливаються. Ось так я думаю, схожий сховище з такою моделлю:
Друг знайшов цю систему досить складною та схильною до помилок. Він запропонував чудову та популярну модель Вінсента Дріссена , яку мені було важче керувати та вимагати дисципліни. Звичайно, це чудово (і перевірено!), Але здається занадто складним для нашої ситуації.
Моя подруга
Тоді він запропонував іншу модель: у нас був би сховище для кожного плагіна у версії Liferay (так ми би почали створювати a, kittens-lf5.2-portlet
а потім a kittens-lf6.0-portlet
), кожен з master
гілкою та develop
гілкою. master
Буде завжди готовий до розгортання. (Або може бути навпаки, master
і stable
, як пропонує Стів Лош ).
Це дуже просто, але мені ця система не сподобалась:
- це може призвести до величезної кількості сховищ у проекті, що зробить Gitorious важким для перегляду.
- Назва довідника проекту є актуальною. Якщо хтось клонує сховище до
kittens-lf6.0-portlet
dir та генерує WAR за допомогою мурашки (як зазвичай), WAR будеkittens-lf6.0-portlet
також ім'ям . Старі версії цього портлета (названіkittens-portlet
наприклад) вважатимуться різними (і, мабуть, відсутніми) портлетами на оновленому порталі. Трохи турботи можна цього уникнути, але я вважаю за краще уникати цього. - Різні версії одного і того ж плагіна будуть підтримуватися окремо. Я розбиваю серце :(
kittens-lf6.0-portlet
гадаю, це ім'я сховища.
Я підозрюю, що два останні моменти - які є ще двома суб'єктивними - є головною причиною мого небажання. Тим не менш, усі чотири заперечення стоять.
ОТО, моя власна пропозиція здається мені дивною, і мені цікаво, чи є на ній приховані помилки. Git OT3rdH настільки потужний і гнучкий, що, на мою думку, мені не слід соромитися, вивчаючи його можливості.
Отже, я прошу:
- Яка була б найкраща модель? Моя пропозиція? Моя подруга? Тепер традиційна система Вінсента Дріссена?
- Яку ще модель розгалуження ви б запропонували?
- Якщо ви вважаєте, що моя модель погана, чому ви так вважаєте? Мені б хотілося дізнатися, які є недоліки та сліпі плями.
* Насправді я вважаю за краще тег фіксувати за допомогою такої версії, як, v1
але, мабуть, тег у git не входить у гілку - тобто я не міг би мати 1 v1
тега lf5.2
та ще один lf6.0
- - тому я маю назвати ім'я відділення. Чи правильно BTW?