W przeważającej części jest to zwykły przepływ pracy stosowany w dowolnym VCS, z którego korzystaliśmy do tej pory. W przypadku niektórych (CVS, SVN) jest to trudniejsze, w przypadku GIT jest to banalne. To powiedziawszy, mam dwie uwagi:
Po pierwsze, istnieją dwie szkoły myślenia dotyczące gałęzi fabularnych:
- Scal je
- Odzyskaj je
(1) wydaje się sugerować artykuł. Problem z zatwierdzaniem scalania to tak zwane Połączenia Zła . W szczególności te, które łączą ścieżki rozwoju, w których funkcja zmieniła semantykę w jednej z gałęzi, ale automatyczne scalanie nie usuwa wszystkich wystąpień w kodzie pochodzącym z drugiej gałęzi. Regiony wprowadzone w ten sposób są niezwykle trudne do debugowania. Jako użytkownik GIT zazwyczaj możesz być bardziej zrelaksowany w kwestii regresji, ponieważ git bisect
musisz automatycznie znaleźć ich przyczyny. Jednak w opisanej sytuacji git bisect
wskaże zatwierdzenie scalania, co wcale nie pomaga.
(2) pozwala uniknąć tego problemu, starając się zachować jak najbardziej liniową historię. Przeciwnicy rebase twierdzą, że unieważnia wszelkie testy, które mogłeś wykonać przed rebase.
Osobiście jestem mocno w obozie (2), ponieważ bardziej cenię ważność git bisect
wyników niż potencjalną utratę zasięgu testu, co można łatwo zrekompensować za pomocą odpowiedniego systemu CI.
Po drugie, zdecydowałem, że przepychanie między programistami rzadko jest dobrym pomysłem. Istnieją problemy z bezpieczeństwem związane z umożliwieniem wszystkim ssh w twoim pudełku, aby pobrać lub uruchomieniem git-deamon lokalnie, a co ważniejsze, w zespołach niezbyt małych, nadzór może zostać utracony dość szybko.
To powiedziawszy, jestem zwolennikiem repozytorium pomostowego (czasami nazywanego także scratch ), które pozwala podelementom dzielić się swoją pracą w toku za pośrednictwem centralnego serwera, który jednak różni się od głównego (często zewnętrznego - skierowane, jeśli nie publiczne). Zazwyczaj każdy podzespół utrzymywałby dla siebie jedną gałąź tematyczną, a system CI dokonywałby okresowych połączeń ośmiornicy wszystkich gałęzi tematycznych w jedną dużą gałąź integracyjną, narzekając na konflikty i błędy kompilacji.
git bisect
podano również jako powód do utrzymania płaskiej strategii.git bisect
samym sobą. Dzieje się tak, gdy funkcja A zmienia funkcję, z której korzysta również funkcja B. Wszystkie testy przejdą zarówno A, jak i B przed scaleniem, ale po scaleniu testy mogą się przerwać z powodu niezgodnych zmian między A i B - alegit bisect
nie mogą częściowo zastosować jednej gałęzi do drugiej, więc jedyną wskazówką jest to, że scalanie zatwierdza jest kiedy błąd został wprowadzony.Obecnie robię masowe i długotrwałe refaktoryzacje (przekształcanie aplikacji z jednego na inny zestaw GUI) i wykonuję udany przepływ pracy zorientowany na bazę, ponieważ inni członkowie zespołu nadal pracują nad nowymi funkcjami:
Przeważnie są dwie główne gałęzie,
master
gdzie rozwijane są nowe funkcje oraztoolkit-conversion
gałąź. Najważniejsza zasada jest prosta: wtoolkit-conversion
gałęzi wykonuj tylko te czynności, które są istotne dla konwersji. Ilekroć jest coś, co można zrobić wmaster
(starym zestawie narzędzi GUI), robię to tam i bazuję swojetoolkit-conversion
zmiany na nowejmaster
głowie. Kolejną zasadą jest utrzymywanietoolkit-conversion
gałęzi dość krótkiej. Dlatego często używam resetowania, wybierania i zmiany-zatwierdzania i zmiany bazy, aby przykleić mniejsze zobowiązania do większych (które na końcu mają taki sam cel). Działa to również dobrze, gdy próbowałem czegoś, co nie zadziałało dobrze, aby „cofnąć” zmianę lub po ponownej obróbce kodu tymczasowym kodem pomocniczym.Zdecydowałem przed scalanie zmian z
master
dotoolkit-conversion
oddziału, ponieważ miałoby to znacznie trudniejsze do rebase wcześniejsze zobowiązuje się do utrzymania w czystości i łatwe do przeglądu oddziału. Fuzje mogą również powodować konflikty, których rozwiązania nie są tak jasne, jak w przypadku prowadzenia czystej historii.Oczywiście ten przepływ pracy ma również wady. Najważniejsze jest to, że działa dobrze tylko dla jednej osoby. Ilekroć zmuszam
toolkit-conversion
gałąź do przesunięcia na siłę po ponownym osadzeniu jej na głowiemaster
, ciągnięcie jej do innego repozytorium staje się trudne (automatyczne przejście do gałęzi śledzącej często kończy się konfliktem).Na koniec mój
toolkit-conversion
oddział pozostaje krótki, czysty i łatwy do przejrzenia. Nie mogłem sobie wyobrazić, że robiłem tak podobną moc z np. SVN.źródło
W firmie, w której obecnie pracuję, od jakiegoś czasu stosujemy odmianę tego samego modelu rozgałęziającego. Używamy również Scruma, dlatego wykonujemy przepływ pracy według gałęzi.
Jedynym problemem, jaki do tej pory mieliśmy, jest to, że zespół jest wystarczająco duży i można rozpocząć więcej niż jedną historię, a te historie są od siebie zależne, łączenie zmian między oddziałami i powrót do mistrza staje się rodzajem bałaganu.
Poza tym okazało się to godne zaufania :).
źródło
Obecnie jestem zajęty dostosowywaniem tego przepływu pracy. Myślę, że jest to całkiem niezły przepływ pracy, ponieważ wykorzystuje model rozgałęzienia, w którym przoduje git.
Jedynym niewielkim minusem jest to, że wymaga dyscypliny w utrzymywaniu tego przepływu pracy i nie próbuje robić skrótów.
Twórcy kohany również korzystają z tego przepływu pracy i wydaje się, że bardzo go lubią.
źródło
W pracy używamy podobnego przepływu pracy, ale nieco mniej skomplikowanego. Jest jednak bardzo zainspirowany tym procesem, ponieważ czytałem ten artykuł wiele razy. Mam nawet plik pdf modelu rozgałęzionego wydrukowany w kolorze obok mojego biurka :)
Produktywny. Jak definiujesz produktywność? Cóż, moim zdaniem najważniejsze jest, aby mieć wysoką jakość, przynajmniej starać się przez cały czas osiągać lepszą jakość. Ciągłe doskonalenie procesu itp. Jeśli możesz wyprodukować kod jakości, skorzysta na nim wydajność. Tak więc pytanie brzmi: czy poprawia to jakość oprogramowania? I moja odpowiedź na to pytanie jest zdecydowanie tak.
Najbardziej podoba mi się ten model rozgałęziania, ponieważ wprowadza rozgałęzienia w różnych warstwach jakości. Im bardziej na prawo na zdjęciu, tym wyższa stabilność i wyższa jakość. Gałąź główna jest święta i wszystkie zatwierdzenia na niej powinny być traktowane jako stabilne wersje oprogramowania. Im bardziej w lewo, tym bardziej eksperymentalny i niższa stabilność.
Gdy tylko przetestujesz nowe funkcje i poprawki błędów, możesz stopniowo przenosić je od lewej do prawej, a tym samym poruszać się w kodzie o wysokiej jakości dokładnie wtedy, gdy wiesz, że kod spełnia wymagania jakościowe, których wymagasz od kodu. Cóż, przynajmniej w teorii, ponieważ nie można przetestować wszystkiego do 100% i mieć pewność, że kod nie zawiera żadnych błędów, ponieważ zawsze będzie zawierał błędy. Ale pozwala zachować dużą pewność siebie.
Nic nie jest do bycia bardziej programistą niż praca w systemie, w którym nikt nie ma zaufania do kodu, ponieważ wiedzą, że jest do bani i że jest w nim mnóstwo błędów.
Ważne jest przemyślenie modelu rozgałęzienia, aby dobrze pasował do potrzeb Twojej organizacji. Tylko dlatego, że ten model działa dobrze dla niektórych osób, niekoniecznie oznacza, że jest optymalny lub pożądany dla innego.
Zawsze występują kompromisy, a nawet w tym przypadku. Jednym z kompromisów jest liczba oddziałów w porównaniu ze złożonością. Wprowadzając wiele różnych typów gałęzi, zwiększasz złożoność przepływu pracy. Na przykład błędem może być zawsze zmuszanie ludzi do utworzenia nowej gałęzi funkcji, gdy próbują naprawić prosty błąd, zmieniając kilka wierszy kodu.
Wszyscy wiemy, że błędy są mniej lub bardziej skomplikowane do rozwiązania. Tak więc, gdy wykryty zostanie trywialny błąd, możesz zmniejszyć złożoność i administrację, aby pozbyć się dodatkowych kosztów ogólnych i po prostu pozwolić ludziom bezpośrednio zaangażować się np. W master lub gałąź rozwoju. Ale ponieważ natura twoich poprawek staje się bardziej skomplikowana, warto nałożyć dodatkowe koszty na tworzenie dla nich nowych gałęzi. Zwłaszcza jeśli nie masz pewności co do jego wielkości i długości lub chcesz poprawić współpracę między tobą a innymi programistami.
Jest to bez wątpienia dobre podejście i może pasować do większości przypadków, ponieważ większość z nas ma podobne procesy rozwoju, ale może nie być odpowiednie dla wszystkich. Usilnie nalegam, abyś przemyślał sposób postępowania z kodem w tej chwili i spróbował stworzyć model rozgałęzienia pasujący do tego, który już masz.
Najważniejsze jest, aby zacząć od git, a reszta nastąpi naturalnie. Zacznij prosto i stopniowo ulepszaj! Bądź kreatywny!
Twoje zdrowie
źródło