Kluczową rzeczą, do której git-flow miał się odnieść, była umiejętność rozumienia roli danej gałęzi oraz tego, z czym rozgałęzia się i łączy.
Idealnie wszystkie gałęzie łączą się z powrotem w linię kodową, z której zostały scalone. Zazwyczaj jest to połączenie z linią główną (w git-flow to jest dev
). Uwzględnij gałęzie i połącz z dev, zwolnij gałęzie i scal z dev (z dodatkowym scaleniem master
). Poprawki rozgałęziają się i łączą z master (z tym dodatkowym połączeniem z powrotem do dev).
Każda linia kodowa rozgałęzia się i łączy z powrotem do swojego elementu nadrzędnego. Linia kodu może pobrać kod z innych linii kodu w dowolnym momencie, jeśli jest to konieczne.
Jeśli gałąź z gałęzi funkcji to „Chcę zbadać ten sposób rozwiązania problemu w tej gałęzi funkcji” - doskonale. Rozgałęzia się z gałęzi funkcji, zatwierdza część kodu i scala z powrotem do gałęzi funkcji (lub jest odrzucany).
- gałąź z funkcji
- zbadać pomysł
- scal do funkcji
To, czego chcesz jednak uniknąć, to coś, co wygląda:
- odgałęzienie od wymaganej funkcji
- pracować nad kodem
- scal z dev, gdy wymagana funkcja zostanie zakończona
- sprawdź funkcjonalność (i dodatkowe zatwierdzenia) w gałęzi funkcji
- połączyć z dev
Powodem jest to, że początek i koniec się nie zgadzają - nieco trudniej jest zrozumieć, co to jest i było. Nie jest to niemożliwe, ale sprawia, że ktoś potrzebuje nieco więcej czasu, aby zrozumieć jego rolę.
Jeśli jednak jest to nowa funkcja, która zależy od kodu, który nie został jeszcze znaleziony w dev, przepływ powinien wyglądać następująco:
- oddział z dev
- połączyć z wymaganą funkcją
- pracować nad kodem
- scal z dev, gdy wymagana funkcja zostanie zakończona
- sprawdź funkcjonalność (i dodatkowe zatwierdzenia) w gałęzi funkcji
- połączyć z dev
Zauważ, że zaczyna się od odgałęzienia od dev i kończy scaleniem z dev.
To powiedziawszy, prawdopodobnie najlepszą rzeczą do zrobienia jest uniknięcie łączenia jednej funkcji do drugiej. Rozgałęź tę funkcję, rób wszystko, co jest potrzebne ... i czekaj.
- oddział z dev
- pracować nad kodem
- scal z dev, gdy wymagana funkcja zostanie zakończona
- sprawdź funkcjonalność (i dodatkowe zatwierdzenia) w gałęzi funkcji
- połączyć z dev
Zapewnia to najbardziej stabilny zestaw gałęzi i kodu.
Coś, co należy wziąć pod uwagę w przyszłych pracach, to mieć funkcję publikowania niezbędnych interfejsów do współdziałania z innymi funkcjami - nawet jeśli kod implementacji nie jest kompletny. Zostałoby to połączone z dev, a następnie wymagana funkcja mogłaby działać z tych interfejsów, podobnie jak funkcja przyszłości. To prawdopodobnie pozwoliłoby na dalszy rozwój funkcji przyszłej (kodowanie w stosunku do interfejsów, testowanie w stosunku do kodów pośredniczących, które implementują interfejsy), niż gdyby musiał czekać na scalenie wymaganej funkcji.