Close

Przepływ pracy Gitflow

Gitflow to starszy przepływ pracy w systemie Git, który pierwotnie stanowił przełomową i nowatorską strategię zarządzania gałęziami Git. Gitflow stracił popularność na rzecz przepływów pracy opartych o gałąź główną, które obecnie uznaje się za najlepsze rozwiązania w zakresie nowoczesnego ciągłego tworzenia oprogramowania i praktyk DevOps. Korzystanie z Gitflow może również kłopotliwe w przypadku procesów CI/CD. Ten wpis opisujący szczegóły Gitflow zamieszczamy ze względów historycznych.


Czym jest Gitflow?


Gitflow jest alternatywnym modelem tworzenia gałęzi w Git, który obejmuje użycie gałęzi funkcji i wielu gałęzi podstawowych. Został on po raz pierwszy opublikowany i spopularyzowany przez Vincenta Driessena w witrynie nvie. W przeciwieństwie do tworzenia oprogramowania opartego o gałąź główną, Gitflow obejmuje większą liczbę dłuższych gałęzi i większe commity. W tym modelu programiści tworzą gałąź funkcji i opóźniają scalenie jej z gałęzią główną do momentu ukończenia pracy nad funkcją. Scalenie tak dłuższych gałęzi funkcji wymaga więcej współpracy i zwiększa ryzyko odchyleń od gałęzi głównej. Może również prowadzić do wprowadzenia sprzecznych aktualizacji.

Gitflow można używać w projektach, które mają zaplanowany cykl wydawania oraz do realizacji najlepszych praktyk DevOps w zakresie ciągłego dostarczania. Ten przepływ pracy nie wnosi żadnych nowych koncepcji ani poleceń oprócz tych, które są wymagane w przepływie pracy gałęzi funkcji. Zamiast tego przypisuje on bardzo konkretne role różnym gałęziom oraz definiuje sposób i czas ich interakcji. Oprócz gałęzi feature wykorzystuje on osobne gałęzie do przygotowywania, serwisowania i rejestrowania wydań. Naturalnie pozwala on wykorzystać wszystkie zalety przepływu pracy gałęzi funkcji, takie jak pull requesty, odizolowane eksperymenty i bardziej efektywna współpraca.

Okno konsoli
materiały pokrewne

Zaawansowany dziennik Git

Logo Bitbucket
POZNAJ ROZWIĄZANIE

Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud

Jak to działa


Przepływ pracy Git

Gałęzie programistyczna i główna

Zamiast pojedynczej gałęzi main do rejestrowania historii projektu w tym przepływie pracy są wykorzystywane dwie gałęzie. W gałęzi main jest przechowywana historia oficjalnych wydań, natomiast gałąź develop służy do integrowania funkcji. Wygodnym rozwiązaniem jest również tagowanie wszystkich commitów w gałęzi main numerem wersji.

Pierwszym krokiem jest uzupełnienie domyślnej gałęzi main o gałąź develop. Prostym sposobem na to jest utworzenie przez jednego programistę pustej gałęzi develop lokalnie, a następnie wypchnięcie jej na serwer:

git branch develop
git push -u origin develop

Ta gałąź będzie zawierała pełną historię projektu, a gałąź main będzie zawierała wersję skróconą. Teraz inni programiści powinni sklonować centralne repozytorium i utworzyć gałąź śledzącą gałąź develop.

W przypadku korzystania z biblioteki rozszerzeń git-flow wykonanie polecenia git flow init w odniesieniu do istniejącego repozytorium spowoduje utworzenie gałęzi develop:

$ git flow init


Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [main]
Branch name for "next release" development: [develop]


How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []


$ git branch
* develop
 main

Gałęzie funkcji


Krok 1. Utwórz repozytorium

Każda nowa funkcja powinna mieć własną gałąź, którą można wypchnąć do centralnego repozytorium na potrzeby utworzenia kopii zapasowej lub prowadzenia współpracy. Jednak gałęzie feature nie są tworzone jako odchodzące od gałęzi main, ale wykorzystują gałąź develop jako gałąź nadrzędną. Gdy funkcja jest gotowa, zostaje scalona z powrotem z gałęzią develop. Funkcje nigdy nie powinny wchodzić w bezpośrednie interakcje z gałęzią main.

Przepływ pracy Git — gałęzie funkcji

Należy zauważyć, że gałęzie feature połączone z gałęzią develop są pod względem zamierzeń i celów tożsame z przepływem pracy gałęzi funkcji. Ale przepływ pracy Gitflow nie ogranicza się tylko do tego.

Gałęzie feature zasadniczo wyprowadza się z ostatniej gałęzi develop.

Tworzenie gałęzi funkcji

Bez rozszerzeń git-flow:

git checkout develop
git checkout -b feature_branch

Z użyciem rozszerzeń git-flow:

git flow feature start feature_branch

Kontynuuj pracę, korzystając z Git tak jak zwykle.

Kończenie gałęzi funkcji

Po zakończeniu prac programistycznych związanych z funkcją kolejnym krokiem jest scalenie gałęzi feature_branch z gałęzią develop.

Bez rozszerzeń git-flow:

git checkout develop
git merge feature_branch

Z użyciem rozszerzeń git-flow:

git flow feature finish feature_branch

Gałęzie wydań


Przepływ pracy Git — gałęzie wydań

Gdy w gałęzi develop znajdzie się dostateczna liczba funkcji, aby przeprowadzić wydanie (lub gdy zbliża się wstępnie ustalona data wydania), robi się podział w celu utworzenia gałęzi release odchodzącej od gałęzi develop. Utworzenie tej gałęzi rozpoczyna kolejny cykl wydawania, dlatego po tym czasie nie można dodawać żadnych nowych funkcji. W tej gałęzi można jedynie wprowadzać poprawki błędów, generować dokumentację oraz wykonywać inne zadania związane z wydawaniem. Gdy wszystko będzie gotowe do wydania, gałąź release jest scalana z gałęzią main i tagowana numerem wersji. Dodatkowo należy scalić ją z powrotem z gałęzią develop, w której od momentu wydania mogły zostać wprowadzone jakieś zmiany.

Zastosowanie dedykowanej gałęzi do przygotowywania wydań umożliwia jednemu zespołowi dopracowywanie bieżącego wydania, podczas gdy inny zespół może nadal pracować nad funkcjami do kolejnego wydania. Pozwala to również podzielić prace programistyczne na wyraźnie zdefiniowane fazy (np. można z łatwością powiedzieć: „W tym tygodniu przygotowujemy wersję 4.0” i faktycznie zobaczyć to w strukturze repozytorium).

Tworzenie gałęzi release jest kolejną prostą operacją tworzenia gałęzi. Podobnie jak gałęzie feature gałęzie release są oparte na gałęzi develop. Nową gałąź release można utworzyć za pomocą opisanych poniżej metod.

Bez rozszerzeń git-flow:

git checkout develop
git checkout -b release/0.1.0

Z użyciem rozszerzeń git-flow:

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

Gdy wydanie będzie gotowe do dostarczenia, zostanie scalone z gałęzią main i develop, a następnie gałąź release zostanie usunięta. Ponowne scalenie z gałęzią develop jest ważne, ponieważ do gałęzi release mogły zostać dodane krytyczne aktualizacje, które muszą być dostępne dla nowych funkcji. Jeśli Twoja organizacja kładzie nacisk na przegląd kodu, byłby to doskonały moment na pull request.

Aby zakończyć gałąź release, użyj poniższych metod:

Bez rozszerzeń git-flow:

git checkout main
git merge release/0.1.0

Lub z użyciem rozszerzeń git-flow:

git flow release finish '0.1.0'

Gałęzie poprawek


Gałąź poprawki w przepływie pracy Git

Gałęzie serwisowe lub hotfix umożliwiają szybkie wprowadzanie poprawek do wydań produkcyjnych. Gałęzie hotfix są bardzo podobne do gałęzi release oraz feature, jednak opierają się na gałęzi main, a nie develop. Są to jedyne gałęzie, które powinny wyprowadzane bezpośrednio od gałęzi main. Gdy tylko poprawka będzie gotowa, należy ją scalić z gałęziami main i develop (lub bieżącą gałęzią release), a gałąź main należy otagować zaktualizowanym numerem wersji.

Dzięki dedykowanej linii prac programistycznych dotyczących poprawek błędów zespół może rozwiązywać problemy bez przerywania pozostałej części przepływu pracy albo oczekiwania na kolejny cykl wydawania. Gałęzie serwisowe można traktować jako doraźne gałęzie release, które współpracują bezpośrednio z gałęzią main. Gałąź hotfix można utworzyć przy użyciu następujących metod:

Bez rozszerzeń git-flow:

git checkout main
git checkout -b hotfix_branch

Z użyciem rozszerzeń git-flow:

$ git flow hotfix start hotfix_branch

Podobnie jak w przypadku kończenia gałęzi release, gałąź hotfix jest scalana z gałęziami main i develop.

git checkout main
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch

Przykład


Poniżej przedstawiono kompletny przykład ilustrujący przepływ gałęzi funkcji. Założono w nim, że mamy konfigurację repozytorium z gałęzią main.

git checkout main
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout main
git merge develop
git branch -d feature_branch

Oprócz przepływu dla gałęzi feature i release przedstawiamy również przykład przepływu dla gałęzi hotfix:

git checkout main
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout main
git merge hotfix_branch

Podsumowanie


W tej części omówiliśmy przepływ pracy Gitflow. Gitflow jest jednym z wielu stylów przepływu pracy Git, z których może korzystać Twój zespół.

Najważniejsze wnioski na temat przepływu Gitflow:

  • Ten przepływ pracy doskonale sprawdza się jako przepływ pracy nad oprogramowaniem oparty na wydaniach.
  • Gitflow oferuje dedykowany kanał do wprowadzania poprawek w wersji produkcyjnej.

Ogólny proces Gitflow jest następujący:

1. Utworzenie gałęzi develop wyprowadzonej z gałęzi main.

2. Utworzenie gałęzi release wyprowadzonej z gałęzi develop.

3. Utworzenie gałęzi feature wyprowadzonej z gałęzi develop.

4. Po zakończeniu prac nad gałęzią feature scalenie jej z gałęzią develop.

5. Gdy gałąź release jest gotowa, scalenie jej z gałęziami develop i main.

6. W razie wykrycia problemu w gałęzi main utworzenie gałęzi hotfix wyprowadzonej z gałęzi main.

7. Po zakończeniu prac nad gałęzią hotfix scalenie jej z gałęziami develop i main.

W dalszej kolejności zapoznaj się z przepływem pracy z podziałem lub odwiedź stronę z porównaniem przepływów pracy.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up