Udany model oddziałów w Git

Aby użyć Git ważne jest, i który obejmuje utrzymywanie współpracy na rzecz rozwoju środowiska dla oprogramowania w zarządzaniu.

Kredyty

Ten post jest portugalską wersją oryginału, w języku angielskim, “Udany model rozgałęzienia Gita“, należycie autoryzowane przez autora, Wincenty Driessen. Dziękuję człowieku!

Ze względów technicznych, niektóre słowa kluczowe były celowo przechowywane w języku angielskim. Starałem się zapewnić oryginalność tekstu, ale przyznaję, że musiałem dokonać korekt, aby ułatwić zrozumienie w naszym języku (EN-USA). Każda korekta lub sugestia poprawy w tłumaczeniu jest mile widziana.

Wprowadzenie

To nie jest post nauczania, jak korzystać z Git. Jeśli jest to, czego potrzebujesz, proponuję spojrzeć na Instrukcja do Git. Nie naszym celem jest również pokazanie, jak zrobić wersję oprogramowania, w takim przypadku, Zobacz Przechowywanie wersji semantycznych.

Tutaj propozycja jest zarządzanie współpracą zespołu w wersji oprogramowania. Wiesz, kiedy masz wielu programistów “Mieszając” w tym samym kodzie źródłowym? Jest to ważne, aby przyspieszyć rozwój, ale może generować wiele bólu głowy (obrażenia i przeróbki) jeśli nie ma kontroli. Aby zapobiec zastępowaniu pracy innego dewelopera i zapewnianiu stopniowego i zorganizowanego rozwoju, minimalizowanie konfliktów i zarządzanie wersjami oprogramowania, jest to, że używamy Git i Oddziałów następnie.

Model oddziału

W tym poście przedstawiam model rozwoju, którego użyłem w niektórych moich projektach (zarówno w pracy, jak i prywatnie) o z 1 lat temu, i to było bardzo udane. Dawno temu chciałem o tym napisać, ale nigdy nie znalazłem dostępnego czasu, Pory. Nie będę mówił o szczegółach projektu, tylko o strategiach Oddziałów i zarządzanie Zwalnia.

Model ten koncentruje się wyłącznie na Git jako narzędzie do przechowywania wersji całego naszego kodu źródłowego. (Przy okazji, jeśli jesteś zainteresowany Git, nasza firma GitPrime, Nowy Zapewnia, w czasie rzeczywistym, niesamowite analizy danych do optymalizacji inżynierii oprogramowania)

Dlaczego git?

Do dokładnej dyskusji na temat zalet i wad Git w porównaniu do scentralizowanych systemów kontroli źródła, Zobacz The Sieci web. Istnieje ogromna “Wojny” wokół tego. Jako programista, Wolę Git nad wszystkimi innymi narzędziami istniejącymi dzisiaj. Git bez wątpienia zmienił sposób myślenia programistów o Korespondencji seryjnej lub utworzyć Oddział. Pochodzę z klasycznego świata CVS/Wywrotowość, Gdzie scalanie/rozgałęzienia to coś, co po prostu zrobić od czasu do czasu i zawsze wydaje się trochę przerażające (“Uważaj na konflikt interesów Korespondencji seryjnej, oni cię gryzą!”).

Już z Git te działania [scalanie/rozgałęzienia] są niezwykle proste i stanowią jedną z głównych części naszej rutyny, Wierzyć. Na przykład, w Dokonać rezerwacji CSV/Subversion, Rozgałęzienia i Scalanie po raz pierwszy poruszane są dopiero w późniejszych rozdziałach (dla zaawansowanych użytkowników), podczas gdy w książka na Git, widać to w rozdziale 3 (Podstawowe).

W związku z jego prostotą i powtarzalnym charakterem, Rozgałęzienia i Scalanie nie są już czymś, czego należy się bać. Faktycznie, narzędzia do kontroli wersji powinnyKorespondencji seryjnej i tworzyć Oddział więcej niż cokolwiek innego.

Koniec z mówieniem, przejdźmy do modelu rozwoju. Model, który tutaj przedstawię, to w zasadzie nic innego jak zestaw procedur, które każdy członek zespołu musi przestrzegać, aby dojść do procesu rozwoju zarządzanego oprogramowania.

Zdecentralizowane, ale scentralizowany

Konfiguracja repozytorium, której używamy, działa bardzo dobrze z tym Rozgałęzienia składa się z centralnego repozytorium. Należy pamiętać, że to repozytorium jest “miał jak” Centrum (ponieważ Git jest DVCS [Rozproszone systemy kontroli wersji], IE, nie ma to jak centralne repozytorium na poziomie technicznym). Będziemy odwoływać się do tego repozytorium jako Pochodzenia, ponieważ ta nazwa jest znana wszystkim użytkownikom Git.

Każdy deweloper Ściąga i Popycha dla Pochodzenia. Ale poza relacją push-pull dla scentralizowanych [Pochodzenia], każdy programista może również odebrać [Wyciągnąć] zmiany innych par w celu utworzenia podzespołów. Na przykład, może to być przydatne do współpracy z dwoma lub więcej programistami nad nową, świetną funkcjonalnością, poprzednio wysyłanie [Pchanie] w toku prac nad Pochodzenia. Na powyższym rysunku, istnieją alice i bob's subteams, Alicja i Dawid, i Clair i David.

Technicznie, oznacza to nic więcej niż Alice zdefiniowane zdalnego Git nazwie Bob, wskazując repozytorium Boba, i odwrotnie.

Główne gałęzie

W tle, ten model rozwoju jest dość inspirowany istniejącymi modelami. Centralne repozytorium ma dwie gałęzie [Oddziałów] z nieskończonym życiem:

  • Mistrz
  • opracowania

The gałąź główna w Pochodzenia powinien być znany każdemu użytkownikowi Git. Równolegle do gałąź główna, jest jeszcze jeden Oddział Wywoływana opracowania.

Rozważyć pochodzenie/wzorzec jako główna gałąź, w której kod źródłowy Głowy zawsze odzwierciedla stan gotowość do produkcji [gotowy do produkcji].

Rozważyć pochodzenia/rozwoju jako Oddział w przypadku gdy kod źródłowy Głowy zawsze odzwierciedla stan z najnowszymi zmianami rozwojowymi, które mają zostać dostarczone w następnym wydaniu. Niektórzy nazwaliby to “Oddział Integracji”. To tam zdarzają się najbardziej złowieszcze budynki.

Gdy kod źródłowy w rozwój gałęzi osiąga stabilny punkt i jest gotowy do uwolnienia [Wydany], wszystkie zmiany muszą zostać scalone [Scalone] powrót do gałąź główna a następnie oznaczone numerem wersji [wydania]. Jak to się szczegółowo robi, zostaną omówione później.

Tak, za każdym razem, gdy zmiany są włączane [Scalone] powrót do Mistrz, nowa wersja jest generowana [Wydany], z definicji. Staramy się być bardzo surowi w tej kwestii, Tak, Teoretycznie, moglibyśmy nawet użyć skryptu hak, nowy automatycznie tworzyć i wysyłać naszą aplikację na serwery produkcyjne, gdy Zatwierdzanie w Mistrz.

Oddziały pomocnicze

Obok Oddziałów Główne, Mistrz i opracowania, nasz model rozwoju wykorzystuje różne Oddziałów wsparcie w celu wspierania jednoczesnego rozwoju wśród członków zespołu, To, co 1) ułatwia śledzenie nowych funkcji [Funkcje], 2) przygotowuje się do dostarczenia nowej wersji [wydania] i 3) pomaga szybko naprawić awarie produkcji [Poprawek]. Niepodobny Oddziałów Główne, Te Oddziałów ma krótką żywotność, ponieważ zostaną one ostatecznie usunięte.

Różne rodzaje Oddziałów [Pomocnicze] że możemy użyć, Są:

  • Gałęzie obiektów
  • Zwolnij gałęzie
  • Gałęzie poprawek

Każdy z tych Oddziałów ma określony cel i jest związany ścisłymi zasadami, Aby, Oddziałów może prowadzić do Oddział i że Oddziałów muszą zostać połączone [Scalone] do twoich celów. Zobaczymy każdy z nich [Oddziałów] w jednej chwili.

Z technicznego punktu widzenia, Te Oddziałów nie są brane pod uwagę “Specjalne”. Każdy rodzaj Oddział jest klasyfikowany przez sposób, w jaki ich używamy. W każdym razie, są po prostu proste Oddziałów starego, dobrego Gita.

Gałęzie obiektów

[Funkcje = funkcje/funkcjonalność]

– Może rozgałęzić się [Oddział] Z:
opracowania
– Powinna ona łączyć [Korespondencji seryjnej] ponownie:
opracowania
– konwencji o mianowaniu Oddział:
Nic, Oprócz Mistrz, opracowania, uwalnianie-*, Lub poprawka-*

Tthe oddziałów funkcji (lub czasami nazywane gałęzie tematów) są wykorzystywane do opracowywania nowych funkcji/ funkcji dla nadchodzącej lub przyszłej wersji. Po rozpoczęciu opracowywania Funkcji, wersja docelowa, w której ta funkcja zostanie włączona, może być nieznana w tym momencie.

Istotą oddziałów funkcji jest to, że istnieje tak długo, jak Funkcji jest w fazie rozwoju, ale ostatecznie zostanie on akces [Scalone] powrót do opracowania (aby zdecydowanie dodać nowy Funkcji do następnego wydania) lub odrzucone (w przypadku nieudanego doświadczenia).

Gałęzie obiektów zazwyczaj istnieją tylko w repozytorium opracowania, nie w Pochodzenia.

Tworzenie gałęzi obiektów

$ git kasa -b rozwój myfeature
# Switched to a new branch "myfeature"

Włączenie gotowej funkcji do opracowania

Funkcje ukończone mogą być scalane[Scalone] z rozwój gałęzi aby zdecydowanie dodać je do następnego wydania.

$ git checkout rozwijać
# Przełączony na oddział "rozwijaj"
$ fuzja git --w-ff myfeature
# Aktualizacja ea1b82a.. 05:9557
# (Podsumowanie zmian)
# $ git oddział -d myfeature
# Usunięto myfeature oddziału (był 05e9557).
$ git push origin rozwijać

Flaga –no-ff powoduje scalanie [Korespondencji seryjnej] zawsze tworzyć nowy obiekt Zatwierdzanie, nawet jeśli połączenie można było przeprowadzić za pomocą przewijające się do przodu [Ff]. Zapobiega to utracie informacji o historii istnienia gałąź obiektowa, grupowanie wszystkich Zatwierdza które zostały dodane do Funkcji. Porównać:

W tym ostatnim przypadku [na powyższej ilustracji], z historii GITA nie da się dostrzec, który z Zatwierdza zostały wdrożone w ramach Funkcji; trzeba by ręcznie przeczytać wszystkie komunikaty dziennika. Odwróć a Funkcji Cały (IE, grupa Zatwierdza), to prawdziwy ból głowy w ostatniej sytuacji, podczas gdy jest to łatwe do zrobienia, jeśli flaga –no-ff została wykorzystana.

Tak, stworzy to jeszcze kilka obiektów Zatwierdza (Pusty), ale zysk jest znacznie wyższy niż koszt.

Zwolnij gałęzie

[Zwolnij = wydanie/dostawa/wersja]

– Może rozgałęzić się [Oddział] Z:
opracowania
– Powinna ona łączyć [Korespondencji seryjnej] ponownie:
opracowania i Mistrz
– konwencji o mianowaniu Oddział:
uwalnianie-*

Tthe wydania oddziałów pomoc w przygotowaniu nowej wersji produkcyjnej [wydanie produkcji]. Pozwalają one umieścić kroplówki w ostatniej chwili i's. W dodatku, pozwalają one na drobne korekty Błędów i definicję meta-dane dla uzyskania wydania (numer wersji, daty kompilacji, itp). Wykonując wszystkie te prace w oddział wydania, o rozwijanie gałęzi pozostaje czysty, aby otrzymać Funkcje następnego wielkiego wydania [Wersja].

Kluczowy moment, aby stworzyć nowy oddział wydania rozgałęzianie się od opracowania jest wtedy, gdy opracowania jest już (Prawie) odzwierciedlając pożądany stan nowego wydania [Wersja]. Wszystkie Funkcje kandydatów na wydania musi być włączona [Korespondencji seryjnej] The opracowania w tym momencie. Z drugiej strony Funkcje mające na celu Zwalnia kontrakty terminowe powinny spodziewać się wydania [Wersja].

Jest to dokładnie na początku oddział wydania że następny wydania otrzymuje numer wersji – nie wcześniej niż. Do tego momentu, o rozwijanie gałęzi odzwierciedlały zmiany w “następna wersja” [następna wersja], ale nie jest jasne, czy to “następna wersja” w końcu zostanie 0.3 lub 1.0, do czasu, aż oddział wydania jest uruchamiany. Decyzja ta jest podejmowana na początku oddział wydania i jest realizowany zgodnie z zasadami projektu dotyczącymi przechowywania [Proponuję zobaczyć o “Przechowywanie wersji semantycznych“].

Tworzenie gałęzi wydania

Tthe wydania oddziałów są tworzone z rozwijanie gałęzi. Na przykład, powiedzmy, że wersja 1.1.5 jest aktualną wersją produkcyjną i mamy świetną wydania Pochodzących. Stan opracowania jest gotowy na “następna wersja” [następna wersja] i zdecydowaliśmy, że stanie się to wersją 1.2 (Zamiast 1.1.6 lub 2.0). Tak, rozgałęziamy się i dajemy oddział wydania nazwa odzwierciedlający nowy numer wersji:

$ git kasa -Wydanie B-1.2 opracowania
# Switched to a new branch "release-1.2"
$ ./Bump-Wersja.Sh 1.2
# Pliki zostały pomyślnie zmodyfikowane, wersja z podciąśniętym 1.2.
$ git commit (zatwierdzanie git) -The -M "Bumped version number to 1.2"
# [zwolnij-1.2 74d9424] Podciągnięty numer wersji do 1.2
# 1 zmieniono pliki, 1 Wstawienia(+), 1 Usunięcia(-)

Po utworzeniu nowego Oddział i uzyskać do niego dostęp, wpadliśmy na numer wersji. Tutaj, bump-version.sh to skrypt powłoki, który zmienia niektóre pliki z kopii roboczej, aby odzwierciedlić nową wersję. (Może to, Oczywiście, być ręczną zmianą – chodzi o to, że niektóre pliki się zmieniają.) Tak, odbywa się Zatwierdzanie zmienionego numeru wersji.

Ta nowa Oddział może istnieć tam przez jakiś czas, do czasu, aż wydania jest uruchamiany na stałe. W tym okresie, poprawki błędów można zastosować w tym Oddział (zamiast rozwijanie gałęzi). Dodanie nowych i dużych Funkcje tutaj jest surowo zabronione. Należy je połączyć [Scalone] w opracowania i, Jak to, czekać na następny duży wydania.

Finalizowanie gałęzi wydania

Gdy oddział wydania jest gotowa stać się prawdziwą wersją, niektóre działania należy. Pierwszym, o oddział wydania jest łączony z Mistrz (ponieważ każdy Zatwierdzanie w Mistrz to nowa wersja z definicji, Pamiętaj). Następnie, Tę Zatwierdzanie w Mistrz powinny być oznaczone, aby ułatwić przyszłe odniesienie do tej historii wersji. Wreszcie, zmiany wprowadzone w oddział wydania muszą zostać połączone [Scalone] ponownie dla opracowania, tak, aby Zwalnia futures również zawierają te poprawki błędów.

Pierwsze dwa kroki w Git:

$ git mistrz kasy
# Przełączony do gałęzi "master"
$ fuzja git --w-ff wydania-1.2
# Scalanie przez cykliczne.
# (Podsumowanie zmian)
$ tag git -The 1.2

The wydania jest teraz ukończona i oznaczona do przyszłego.

Uwaga:: można również użyć flag -s lub -u , aby podpisać znacznik kryptograficznie.

Aby zachować zmiany wprowadzone w oddział wydania, musimy je z powrotem połączyć na opracowania. Na Git:

$ git checkout rozwijać
# Przełączony na oddział "rozwijaj"
$ fuzja git --w-ff wydania-1.2
# Scalanie przez cykliczne.
# (Podsumowanie zmian)

Ten krok może prowadzić do konfliktu scalania (prawdopodobnie iść, po zmianie numeru wersji). Jeśli tak,, naprawić i zrobić Zatwierdzanie.

Teraz, że naprawdę skończyliśmy, o oddział wydania można usunąć, ponieważ nie będziemy już jej potrzebować:

$ git oddział -d wydanie-1.2
# Usunięte wydanie gałęzi-1.2 (był ff452fe).

Gałęzie poprawek

– Może rozgałęzić się [Oddział] Z:
Mistrz
– Powinna ona łączyć [Korespondencji seryjnej] ponownie:
opracowania i Mistrz
– konwencji o mianowaniu Oddział:
poprawka-*

Tthe Gałęzie poprawek są bardzo podobne do zwalnianie oddziałów, ponieważ mają one również na celu przygotowanie nowej wersji produkcyjnej, chociaż nieplanowane. Wynikają one z konieczności działania natychmiast po niepożądanym stanie wersji produkcyjnej [w użyciu]. Gdy wystąpi błąd krytyczny w wersji produkcyjnej, należy natychmiast rozwiązać, następnie gałąź poprawki można wyprowadzić z oznaczenia istniejącej wersji produkcyjnej w gałąź główna.

Istotą jest to, że praca członków zespołu (w rozwijanie gałęzi) można kontynuować, podczas gdy ktoś inny przygotowuje szybkie rozwiązanie awarii produkcji.

Tworzenie gałęzi poprawki

Tthe gałęzie poprawek są tworzone z gałąź główna. Na przykład, przy założeniu, że wersja 1.2 jest bieżącą wersją wersji produkcyjnej i stwarza problemy z powodu poważnego błędu. Zmiany w opracowania pozostawić nadal niestabilną. Następnie możemy rozgałęzić gałąź poprawki i zacznij rozwiązywać problem:

$ git kasa -b poprawka-1.2.1 Mistrz
# Switched to a new branch "hotfix-1.2.1"
$ ./Bump-Wersja.Sh 1.2.1
# Pliki zostały pomyślnie zmodyfikowane, wersja z podciąśniętym 1.2.1.
$ git commit (zatwierdzanie git) -The -M "Bumped version number to 1.2.1"
# [poprawka-1.2.1 41e61bb] Podciągnięty numer wersji do 1.2.1
# 1 zmieniono pliki, 1 Wstawienia(+), 1 Usunięcia(-)

Nie zapomnij zmienić numeru wersji po rozgałęzieniu!

Następnie, poprawić błąd i Zatwierdzanie korekty w jednym lub więcej Zatwierdzanie Oddzielne.

$ git commit (zatwierdzanie git) -M "Fixed severe production problem"
# [poprawka-1.2.1 abbe5d6] Naprawiono poważny problem z produkcją
# 5 zmieniono pliki, 32 Wstawienia(+), 17 Usunięcia(-)

Finalizowanie gałęzi poprawki

Po zakończeniu, o Bugfix należy połączyć z powrotem w Mistrz, należy go również ponownie włączyć do opracowania, w celu zapewnienia, że Bugfix znajduje się również w następnej wersji. Jest to bardzo podobne do sposobu, w jaki zwalnianie oddziałów są finalizowane.

Pierwszym, zaktualizować Mistrz i oznaczyć wydania [zaznaczyć lato]:

$ git mistrz kasy
# Przełączony do gałęzi "master"
$ fuzja git --w-poprawka ff-1.2.1
# Scalanie przez cykliczne.
# (Podsumowanie zmian)
$ tag git -The 1.2.1

Uwaga:: można również użyć flag -s lub -u , aby podpisać znacznik kryptograficznie.

Następnie, obejmują Bugfix w opracowania Również:

$ git checkout rozwijać
# Przełączony na oddział "rozwijaj"
$ fuzja git --w-poprawka ff-1.2.1
# Scalanie przez cykliczne.
# (Podsumowanie zmian)

Jedynym wyjątkiem od tej reguły jest to, że, gdy istnieje oddział wydania w toku, zmiany w Poprawek muszą zostać połączone w tym celu oddział wydania, Zamiast opracowania. Scalanie Bugfix w oddział wydania spowoduje, że Bugfix jest łączony z opracowania Również, gdy oddział wydania jest zakończona. (Jeśli praca w opracowania natychmiast wymaga tego Bugfix i nie mogę się doczekać, aż oddział wydania jest zakończona, można bezpiecznie scalić Bugfix dla deveolp Również.)

Wreszcie, usunąć Oddział Tymczasowe:

$ git oddział -poprawka d-1.2.1
# Usunięta poprawka gałęzi-1.2.1 (był abbe5d6).

Krótki opis

Chociaż nie ma nic nadzwyczajnego w tym modelu rozgałęzienia, liczba na początku postu może być bardzo przydatna w naszych projektach. Pokazuje łatwy do zrozumienia model mentalny i pozwala członkom zespołu na wypracowanie wspólnego zrozumienia Rozgałęzienia i Zwolnienie.

Wysokiej jakości wersja PDF figury znajduje się na blogu oryginalnego postu: http://nvie.com/posts/a-successful-git-branching-model/ [lub pod poniższym linkiem Pobierz]. Śmiało i umieścić go na ścianie, aby uzyskać szybki punkt odniesienia w dowolnym momencie.

Całkowitej trafienia: 8863

Komentarz na “Udany model oddziałów w Git

  1. Deivson urodzenia powiedział:

    Dzień dobry, SEI o Git foi desenvolvido peło początkowo system Linux więcej ao jest falar em portabilidade, jest powieść wiedzieć lub Git roda nie windows MSI i POSIX??

Odpowiedz

Twój adres e-mail nie zostaną opublikowane. Wymagane pola są oznaczone *