Powinieneś spojrzeć na git-flow . To doskonały (i popularny) model rozgałęziania.
Podsumowanie Git Flow
Rozgałęzienie
Główne pnie, które pozostają na zawsze, to develop
i master
. master
zawiera najnowszą wersję i develop
najnowszą „stabilną” kopię rozwojową.
Współpracownicy tworzą feature
oddziały (poprzedzone feature/
konwencją) z develop
:
$ git checkout -b feature/my-feature develop
i hotfix
gałęzie (poprzedzone hotfix/
konwencją) z master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
Gałęzie te są „jednorazowe”, co oznacza, że mają krótką żywotność, zanim zostaną ponownie połączone z głównymi pniami. Mają one obejmować małe elementy funkcjonalności.
Wykończenie oddziałów
Kiedy współautor zakończy działanie z feature
oddziałem, łączy go z powrotem w develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
Kiedy skończysz z hotfix
oddziału, oni połączyć go z powrotem do obu master
, a develop
więc poprawka przenosi:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
Jest to aspekt ciągłej integracji.
Prasowe
Kiedy jesteś gotowy, aby rozpocząć pakowanie wersji, tworzysz release
gałąź ze swojej gałęzi „stabilnej” develop
(tak samo jak tworzenie feature
gałęzi). Następnie podbijasz numer wersji w znaczniku (opisanym poniżej).
Korzystanie z oddzielnych release
gałęzi pozwala kontynuować rozwijanie nowych funkcji develop
podczas usuwania błędów i dodawania ostatnich poprawek do release
gałęzi.
Kiedy jesteś gotowy, aby zakończyć wydanie, scalasz release
gałąź w jedno master
i drugie develop
(tak jak a hotfix
), aby wszystkie zmiany były kontynuowane.
Tagowanie
Kiedy tworzysz release
gałąź lub hotfix
gałąź, odpowiednio podbijasz numer wersji w znaczniku. W przypadku waniliowego git wygląda to tak:
$ git tag -a <tag-name> -m <tag-description>
Będziesz także musiał wypchnąć tagi (osobno) do zdalnego repozytorium:
$ git push --tags
Zazwyczaj najlepiej jest używać wersji semantycznej, w której twoje wersje mają formę major.minor.hotfix
. Poważne wypukłości są niezgodne wstecz, natomiast drobne wypukłości i poprawki nie są niezgodne wstecz (chyba że jesteś w fazie beta 0.x.x
).
Scalanie
Jak widać powyżej, git-flow zachęca do łączenia gałęzi za pomocą następującego polecenia:
$ git merge --no-ff <branch-name>
Ta --no-ff
opcja pozwala zachować całą historię gałęzi bez pozostawiania wiązki gałęzi leżącej w bieżącym zatwierdzeniu repozytorium (więc nie martw się, nie będziesz miał gałęzi dla każdej wersji).
Zachęcamy również do ciągnięcia
$ git pull --rebase
Więc nie dodajesz wielu bezużytecznych zatwierdzeń scalania.
Możesz skonfigurować git, aby domyślnie robił obie te rzeczy w twoim .gitconfig
. Pozwolę ci jednak spojrzeć na to;)
Przeglądanie wersji
Gdy ktoś szuka konkretnej wersji bazy kodu, może pobrać tag według nazwy:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
Lub, jeśli ktoś przegląda na githubie, w rozwijanym menu „oddziałów” znajduje się także zakładka „tagi”.
Korzystanie z rozszerzenia git-flow (zalecane)
Moim ulubionym sposobem użycia tego modelu jest rozszerzenie git flow dla git.
( Edycja: Louis zalecił widelec AVH, który działa lepiej git describe
i może być teraz bardziej aktywny. Dzięki Louis.)
Rozszerzenie automatyzuje wszystkie niechlujne części (takie jak używanie merge --no-ff
i usuwanie gałęzi po scaleniu), abyś mógł zacząć życie.
Na przykład za pomocą rozszerzenia możesz utworzyć gałąź funkcji w następujący sposób:
$ git flow feature start my-feature-name
i dokończ tak
$ git flow feature finish my-feature-name
Polecenia dotyczące poprawek i wydań są podobne, chociaż używają numeru wersji zamiast nazwy oddziału, na przykład:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
Następnie Git flow tworzy dla Ciebie znacznik wersji i uprzejmie przypomina, aby podnieść wersję w dowolnym pliku konfiguracji lub pliku manifestu (co można zrobić za pomocą menedżera zadań, takiego jak chrząknięcie).
Mam nadzieję, że to pomoże :) Nie jestem pewien, jak dokładnie zintegrowałbyś to wszystko z konfiguracją Travis CI, ale zgaduję, że dostaną się tam githooki.