Uwaga: Moje pytanie koncentruje się na moim konkretnym problemie (który dotyczy Liferay), ale mam nadzieję, że może być użyteczne dla każdego, kto musi utrzymywać różne wersje tego samego projektu na git.
Pracuję w firmie, która pisze wiele wtyczek do Liferay Portal . Wtyczki te (portlety, motywy itp.) Są zwykle wielokrotnego użytku i, oczywiście, powinny być aktualizowane w przypadku nowych wersji portalu.
Jednak zwykle trzeba przeprowadzić migrację, powiedzmy, portletu, do nowej wersji Liferay i zachować jej poprzednią wersję. Ponadto często musimy tworzyć bardzo szczegółowe dostosowania dla niektórych klientów, co nie ma sensu dodawać do „głównej wersji”.
Te wymagania komplikują naszą pracę, ale na szczęście możemy przyjąć pewne uproszczenia. Na przykład wtyczki są często aktualizowane tylko przez jednego programistę na raz. Bardzo rzadko zdarza się, że do wtyczki są dodawane dwie lub więcej funkcji jednocześnie.
Teraz migrujemy do Gitorious . Staramy się stworzyć model rozgałęzienia dla takiego scenariusza.
Mój model
Zaproponowałem:
- Każda wtyczka miałaby własne repozytorium w Gitorious w ramach projektu. Na przykład portlet do wyświetlania kociąt miałby
kittens-portlet
repozytorium wliferay-portlets
projekcie. - Tworząc nową wtyczkę, utwórz ją w oddziale o nazwie zgodnej z wersją Liferay (na przykład
lf5.2
). - Za każdym razem zmiana dokonywana jest na wtyczce, aktualizacja jest zatwierdzony i wdrożony do produkcji, oznacz wtyczkę z wersji (na przykład
lf5.2v1
,lf5.2v2
itp.) * - Za każdym razem, gdy wtyczka powinna zostać przeniesiona do nowej wersji Liferay, rozgałęziamy najnowszą wersję (tworząc na przykład gałąź
lf6.0
). - Po rozpoczęciu produkcji szef nowego oddziału otrzyma tag, taki jak
lf6.0v1
. - Za każdym razem, gdy musimy dostosować wtyczkę w sposób specyficzny dla klienta, tworzymy oddział z nazwą klienta (na przykład, tworzymy oddział
lf5.2clientcorp
dla naszego klienta „ClientCorp Inc.”)
Jest to niezwykły model: nie miałby master
wielu niepowiązanych gałęzi. Tak przypuszczam , że repozytorium z takim modelem wyglądałoby tak:
Znajomy uznał ten system za dość złożony i podatny na błędy. Zasugerował doskonały i popularny model Vincenta Driessena , który nadal uważałem za trudniejszy w zarządzaniu i wymagający dyscypliny. Oczywiście jest świetny (i przetestowany!), Ale wydaje się zbyt skomplikowany w naszej sytuacji.
Model mojego przyjaciela
Potem zasugerował inny model: będziemy mieli repozytorium dla każdej wtyczki w wersji Liferay (więc zaczniemy tworzyć a, kittens-lf5.2-portlet
a następnie a kittens-lf6.0-portlet
), każda z master
gałęzią i develop
gałęzią. master
Będzie zawsze gotowy do wdrożenia. (Lub może być na odwrót master
i stable
, jak sugeruje Steve Losh ).
To bardzo proste, ale nie podobał mi się ten system:
- może zaowocować ogromną ilością repozytoriów w projekcie, co utrudni przeglądanie Gitorious.
- Nazwa katalogu projektu jest istotna. Jeśli ktoś sklonuje repozytorium do katalogu
kittens-lf6.0-portlet
i wygeneruje WAR za pomocą mrówki (jak zwykle), nazwa WAR również będziekittens-lf6.0-portlet
. Stare wersje tego portletu (nazwanekittens-portlet
na przykład) byłyby traktowane jako różne (i prawdopodobnie brakujące) portlety w zaktualizowanym portalu. Trochę ostrożności można tego uniknąć, ale wolałbym tego uniknąć. - Różne wersje tej samej wtyczki zostałyby rozdzielone. Złamię mi serce :(
kittens-lf6.0-portlet
to chyba brzydka nazwa repozytorium.
Podejrzewam, że dwa ostatnie punkty - które są również dwoma bardziej subiektywnymi - są głównym powodem mojej niechęci. Niemniej jednak wszystkie cztery zarzuty pozostają w mocy.
OTOH, moja własna propozycja wydaje mi się dziwna i zastanawiam się, czy są w niej ukryte błędy. Git OT3rdH jest tak potężny i elastyczny, że myślę, że nie powinienem się wstydzić odkrywania jego możliwości.
Więc pytam:
- Jaki byłby najlepszy model? Moja propozycja? Model mojego przyjaciela? Teraz tradycyjny system Vincenta Driessena?
- Jaki inny model rozgałęziania sugerowałbyś?
- Jeśli uważasz, że mój model jest zły, dlaczego tak uważasz? Chciałbym dowiedzieć się, jakie są wady i martwe punkty.
* Właściwie wolałbym otagować zatwierdzenie wersją taką jak, v1
ale najwyraźniej znacznik w git nie ma zasięgu w gałęzi - to znaczy, nie mogłem mieć 1 v1
znacznika lf5.2
i drugiego w lf6.0
- więc muszę nazwać Oddział. Czy to prawda BTW?