Obecnie uczę się obsługi Gita, czytając Pro Git . W tej chwili uczę się o rozgałęzianiu i tagach. Moje pytanie brzmi, kiedy powinienem używać gałęzi, a kiedy tagu?
Na przykład, załóżmy, że tworzę gałąź dla wersji 1.1 projektu. Kiedy skończę i wypuszczę tę wersję, czy powinienem opuścić gałąź, aby oznaczyć wersję wydania? Czy powinienem dodać tag? Jeśli dodam tag, czy powinienem usunąć gałąź wersji (zakładając, że jest ona scalona w główną lub inną gałąź )?
Odpowiedź
W skrócie: Najlepszą praktyką jest rozgałęzienie, częste scalanie i zawsze synchronizacja .
Istnieją dość jasne konwencje dotyczące trzymania kodu w oddzielnych gałęziach od gałęzi głównej:
- Masz zamiar wprowadzić dużą lub przełomową zmianę
- Masz zamiar wprowadzić zmiany, które mogą nie zostać użyte
- Chcesz poeksperymentować z czymś, co do czego nie jesteś pewien, że zadziała
- Kiedy otrzymujesz polecenie rozgałęzienia, inni mogą mieć coś do zrobienia w wzorcu
Ogólna zasada jest taka, że po rozgałęzieniu należy zachować synchronizację z wzorcem gałąź. Ponieważ ostatecznie musisz scalić go z powrotem do mastera. Aby uniknąć ogromnego bałaganu związanego z konfliktami podczas ponownego scalania, należy często zatwierdzać, często scalać.
Dobre praktyki, których należy przestrzegać
Udany model rozgałęziania Git autorstwa Vincenta Driessena ma dobre sugestie. Jeśli ten model rozgałęzienia przemawia do Ciebie, rozważ rozszerzenie przepływu na git . Inni skomentowali przepływ .
Praktyki tagowania
Jak już wiesz, Git podaje identyfikatory zatwierdzeń, takie jak 1.0 -2-g1ab3183 ale to nie są tagi! Oznaczanie odbywa się za pomocą tagu git, a tagi, które są tworzone za pomocą tagu git, są podstawą identyfikatorów zatwierdzeń, które tworzy git opis. Innymi słowy, w Git nie ma się rozgałęzień tagów. Oznaczasz zatwierdzenia. Prawidłowe jest stwierdzenie, że tag jest tylko wskaźnikiem do zatwierdzenia z adnotacją.
Spójrzmy na praktyczny przykład, który to zademonstrował,
/-- [v1.0] v ---.---.---.---S---.---A <-- master \ \-.---B <-- test
Niech „s commit” S „będzie zatwierdzeniem wskazanym przez tag” v1.0 „. To zatwierdzenie jest zarówno w gałęzi „master”, jak i gałęzi „test”. Jeśli uruchomisz " git opisz " nad zatwierdzeniem ” „(Góra gałęzi„ master ”), którą można uzyskać w stylu v1.0-2-g9c116e9
. Jeśli uruchomisz " git opisz " na górze zatwierdzenia „B” (znanego również jako „test”), otrzymasz coś takiego jak v1.0-2-g3f55e41
, tak jest w przypadku domyślnej konfiguracji git-opis. Zwróć uwagę, że ten wynik jest nieco inny. v1.0-2-g9c116e9
oznacza, że jesteśmy w trakcie zatwierdzenia z posortowanym identyfikatorem SHA-1 9c116e9
, 2 zatwierdzenia po tagu v1.0
. Nie ma tagu v1.0-2
!
Jeśli chcesz, aby twój tag pojawił się tylko w gałęzi „master”, możesz utworzyć nowe zatwierdzenie (np. Tylko zaktualizuj domyślne / rezerwowe informacje o wersji w pliku GIT-VERSION-FILE) po punkcie rozgałęzienia gałęzi „test”. Jeśli otagujesz zmiany w gałęzi „test” np. „Wersja 1.0.3” byłaby widoczna tylko z „testu”.
Materiały referencyjne
Znalazłem wiele, wiele przydatnych blogów i postów, na których można się uczyć. Jednak te, które są profesjonalnie zilustrowane są rzadkie. Dlatego chciałbym polecić post – Udany model rozgałęziania Git autorstwa @nvie. Pożyczyłem jego ilustrację:)
Komentarze
- 1.0-2-g1ab3183 jest identyfikatorem skonstruowanym przez gita, opisanym na podstawie informacji dostępnych w git, ale nazwanie go identyfikatorem git to trochę za dużo. Git identyfikuje się za pomocą skrótu SHA; tagi i gałęzie to konstrukcje ludzkie, które git pomaga w śledzeniu. W związku z tym utwórz tag kiedy myślisz, że jakaś ludzka wola pewnego dnia będzie chciała znaleźć wygodną zakładkę do zatwierdzenia.
- wspaniała ilustracja wielowymiarowości we wszechświecie git. piękna. dzięki
- Warto zauważając, że wiele projektów nie wymaga niektórych pasów pokazanych na tym schemacie. Niektóre projekty wymagają tylko tego, co ' nazywa się rozwijaniem i funkcją. Dzieje się tak często w przypadku aplikacji internetowych, które można wdrażać dowolnie.
- Nawet autor git flow nie zaleca go już dla wielu typów projektów, takich jak tworzenie stron internetowych. Wiele osób uważa, że jest to znacznie bardziej złożone niż potrzeba większości projektów, co utrudnia wykonanie i ułatwia popełnienie błędu.Z drugiej strony, niektóre zespoły adwokatów niektórych zaawansowanych praktyków stosują ' rozwój oparty na magistrali ', który prawie nigdy w ogóle nie używa gałęzi, i realizować takie udane projekty. Jeśli szukasz czegoś pośredniego, rozważ " anti-gitflow '
Odpowiedź
Gałąź jest używana, jeśli masz dwie różne wersje repozytorium w tym samym czasie. Znacznik to sposób na oznaczenie punktu w czasie w repozytorium.
Należy dodać tag, aby oznaczyć wydaną wersję. Jeśli chcesz następnie naprawić błędy w tym wydaniu, utworzyłbyś gałąź w tagu.
Chcesz tylko usunąć gałęzie, które zostały scalone z powrotem w HEAD [lub inną gałąź].
Komentarze
- oh … i zakładam, że masz na myśli, że gałąź jest połączona z inną gałęzią, taką jak master. HEAD porusza się za każdym razem, gdy robię kasę, prawda?
- HEAD zwykle wskazuje gałąź (chyba że ' jesteś w odłączonym trybie HEAD), więc HEAD porusza się z gałąź, na którą wskazuje