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 developi master. masterzawiera najnowszą wersję i developnajnowszą „stabilną” kopię rozwojową.
Współpracownicy tworzą featureoddziały (poprzedzone feature/konwencją) z develop :
$ git checkout -b feature/my-feature develop
i hotfixgałę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 featureoddział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 hotfixoddziału, oni połączyć go z powrotem do obu master, a developwię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 releasegałąź ze swojej gałęzi „stabilnej” develop(tak samo jak tworzenie featuregałęzi). Następnie podbijasz numer wersji w znaczniku (opisanym poniżej).
Korzystanie z oddzielnych releasegałęzi pozwala kontynuować rozwijanie nowych funkcji developpodczas usuwania błędów i dodawania ostatnich poprawek do releasegałęzi.
Kiedy jesteś gotowy, aby zakończyć wydanie, scalasz releasegałąź w jedno masteri drugie develop(tak jak a hotfix), aby wszystkie zmiany były kontynuowane.
Tagowanie
Kiedy tworzysz releasegałąź lub hotfixgałąź, 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-ffopcja 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 describei może być teraz bardziej aktywny. Dzięki Louis.)
Rozszerzenie automatyzuje wszystkie niechlujne części (takie jak używanie merge --no-ffi 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.