Git branch strategy for small dev team [closed]

Mamy aplikację internetową, którą aktualizujemy i wypuszczamy prawie codziennie. Używamy git jako naszych VC, a nasza obecna strategia rozgałęzień jest bardzo prosta i zepsuta: mamy gałąź master i sprawdzamy zmiany, z którymi "czujemy się dobrze" w niej. To działa, ale tylko do momentu, gdy sprawdzimy zmianę.

Czy ktoś ma ulubioną strategię git branch dla small teams która spełnia następujące wymagania:

  1. działa dobrze dla zespołów od 2 do 3 programistów
  2. Lightweight, i nie za dużo procesu
  3. pozwala programistom z łatwością wyizolować pracę nad poprawkami błędów i większymi funkcjami
  4. pozwala nam utrzymać stabilną gałąź (dla tych "O cholera" momentów, kiedy musimy uruchomić nasze serwery produkcyjne)

Idealnie, chciałbym zobaczyć twój proces krok po kroku dla dewelopera pracującego nad nowym błędem

Author: Bilal and Olga, 2010-03-12

6 answers

Możesz skorzystać z przepływu pracy, który Scott Chacon opisuje w Pro Git . W tym obiegu pracy zawsze istnieją dwie gałęzie: master i develop .

master reprezentuje najbardziej stabilną wersję Twojego projektu i wdrażasz go do produkcji tylko z tej gałęzi.

develop zawiera zmiany, które są w toku i niekoniecznie muszą być gotowe do produkcji.

Z gałęzi develop tworzysz gałęzie tematyczne do pracy nad poszczególnymi funkcjami i poprawkami. Gdy twoja funkcja / poprawka jest gotowa do pracy, łączysz ją w develop , w którym to momencie możesz sprawdzić, jak współdziała z innymi gałęziami tematycznymi, do których połączyli się Twoi współpracownicy. Gdy develop jest w stanie stabilnym, połącz go z master. Zawsze powinno być bezpiecznie wdrożyć do produkcji z master .

Scott opisuje te długie gałęzie jako "silosy" kodu, gdzie kod w mniej stabilnej gałęzi ostatecznie "absolwent" do jednego uważanego za bardziej stabilny po testach i ogólnej akceptacji przez zespół.

Krok po kroku, twój przepływ pracy w tym modelu może wyglądać tak:

  1. musisz naprawić błąd.
  2. Utwórz gałąź o nazwie myfix , która jest oparta na gałęzi develop .
  3. pracuj nad błędem w tej gałęzi tematu, dopóki nie zostanie naprawiony.
  4. Połącz myfix W rozwiń . Przeprowadzić testy.
  5. odkrywasz swoją poprawkę konflikt z inną gałęzią tematyczną hisfix, który twój współpracownik połączył w develop podczas pracy nad poprawką.
  6. wprowadzić więcej zmian w gałęzi myfix , aby poradzić sobie z tymi konfliktami.
  7. Połącz myfix W rozwiń i uruchom testy ponownie.
  8. Wszystko działa dobrze. Połącz rozwiń W master .
  9. wdrożyć do produkcji z master w dowolnym momencie, ponieważ wiesz, że to stabilny.

Aby uzyskać więcej informacji na temat tego przepływu pracy, zapoznaj się z rozdziałem rozgałęzienia przepływu pracy w Pro Git.

 227
Author: Jimmy Cuadra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 05:30:50

Po przybyciu jako początkujący, próbując znaleźć prostą strategię nauczania dla innych programistów, którzy nigdy nie używali kontroli nad źródłami. This is the one that fit http://nvie.com/posts/a-successful-git-branching-model / próbowałem użyć standardowego przepływu pracy GIT, który znajduje się na stronach podręcznika, ale trochę mnie to zdezorientowało i całkowicie zdezorientowało moich odbiorców.

W ciągu ostatnich 6 miesięcy musiałem naprawiać konflikty tylko dwa razy. Dodałem kroki, aby zawsze testować po połączeniu i "fetch and merge" lub 'pull --rebase' często (raz rano i po południu) podczas tworzenia funkcji. Wykorzystaliśmy również github.com jako centralne miejsce do wyciągania najnowszego kodu.

 45
Author: Clutch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 16:39:53

(zrobiłem mój komentarz powyżej jest własna odpowiedź, jak powinienem był na początku.)

Od Scotta Chacona z Githuba:

Jak to robimy, czym jest GitHub Flow?

    Wszystko w gałęzi master może zostać wdrożone]}
  • aby pracować nad czymś nowym, Utwórz opisowo nazwaną gałąź poza master (ie: new-OAuth2-scopes)
  • Zatwierdź tę gałąź lokalnie i regularnie wypychaj swoją pracę do tej samej gałęzi o tej samej nazwie na serwerze
  • Kiedy potrzebujesz informacji zwrotnej lub pomocy, lub uważasz, że gałąź jest gotowa do scalenia, otwórz pull request
  • po tym, jak ktoś inny przejrzał i podpisał się na funkcja, możesz połączyć go w master
  • Po połączeniu i naciśnięciu przycisku "master", Możesz i powinieneś natychmiast wdrożyć]}

Zobacz cały artykuł po więcej szczegółów: http://scottchacon.com/2011/08/31/github-flow.html

Zauważ, że "pull requests" to Github wynalazek, a to coś, co jest na ich stronie, a nie sam Git: https://help.github.com/articles/using-pull-requests/

 34
Author: program247365,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:34

Użyj gałęzi master jako gałęzi programistycznej i utwórz gałęzie Wydania do wykonywania poprawek błędów.

Wszelkie nowe funkcje pojawią się master w oknie deweloperskim(albo bezpośrednio lub jako gałęzie tematyczne z pull-requestami, do ciebie-nie pokazane w grafice). Po wdrożeniu wszystkich zaplanowanych funkcji wprowadź funkcję zamrożenie i wykonaj testy. Kiedy jesteś szczęśliwy, Oznacz Wydanie master jako v1.0.

Z czasem Twoi użytkownicy znajdą błędy w v1.0 więc będziesz chciał utworzyć gałąź z tego tagu (np. nazwij ją po wydaniu 1.0) i naprawić te błędy w gałęzi. Gdy naprawisz wystarczająco dużo błędów, że wydaje ci się, że gwarantuje nowe wydanie, oznacz je jako v1.0.1 i połącz z powrotem do master.

Tymczasem w gałęzi master może pojawić się nowe okno rozwoju, które ostatecznie zostanie oznaczone jako v1.1.

Spłukać i powtórzyć.

Wynika to z semantycznego wersjonowania logiki numerowania.

 ---------(v1.0)--------------------------------(v1.1)-----------------------------> master
             \                                     \  
              ---(v1.0.1)---(v1.0.2)---> 1.0        ---(v1.1.1)---(v1.1.2)---> 1.1
 15
Author: Leif Gruenwoldt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 00:36:19

W VCS, posiadanie tylko gałęzi" master " szybko pokazuje jej granice, ponieważ nie można kontynuować całego wysiłku rozwojowego w tym samym czasie na jednej gałęzi.
To znaczy, że musisz wiedzieć Kiedy do oddziału.

Ale w DVCS (jak w "zdecentralizowanych" VCS), masz równieżwydanie publikacji, dzięki gałęziom utrzymujesz lokalne repozytoria i gałęzie, do których pchasz lub z których ciągniesz.

W tym kontekście zacznij od zidentyfikowania swojego współbieżny wysiłek rozwojowy i zdecydować się na publikację (push/pull) proces. Na przykład (i nie jest to jedyny sposób):

  • prod jest publiczną gałęzią tylko do odczytu z kodem w produkcji. Każdy mógł z niego wyciągnąć, aby:
      W 2007 roku, w 2008 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku, w 2009 roku]}
    • gałąź do robienia nowych funkcji (ze znanej stajni kod)
    • gałąź do uruchomienia kolejnej gałęzi wydania (tej, która ma być w produkcji)
      nikt nie powinien naciskać bezpośrednio na prod (stąd tylko do odczytu)
  • release jest gałęzią konsolidacji odczytu i zapisu, w której odpowiednie commity są wybierane jako część następnego wydania.
    Każdy może nacisnąć do wydania, aby zaktualizować następne wydanie.
    Każdy może wyciągnąć z tego wydania, aby zaktualizować swój lokalny proces konsolidacji.
  • featureX jest prywatna gałąź odczytu i zapisu (w tym sensie, że nie musi być wciskana do centralnego repo prod), i może być wciskana / ciągnięta pomiędzy reposami dev. To oznacza średnio-i długoterminowy wysiłek, inny niż codzienny dev
  • master reprezentuje bieżący dev i jest wciskany / ciągnięty pomiędzy repozytorium dev.

Istnieją inne procesy zarządzania wydaniami, ponieważ to więc pytanie potwierdza .

 4
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:59

Przeczytaj ReinH ' s Git Workflow for Agile teams tutaj: http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

To działa bardzo dobrze dla małych zespołów. Celem jest upewnienie się, że wszystko, co może być potencjalnie niestabilne, trafi do jakiejś gałęzi. Scal z powrotem do wzorca tylko wtedy, gdy będziesz gotowy, aby wszyscy pracujący poza gałęzią funkcji mogli z niego korzystać.

Uwaga: Ta strategia nie jest specyficzna dla Gita, ale git sprawia, że implementacja tego strategia całkiem łatwa.

 3
Author: whaley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-12 14:53:56