Czy strategia łączenia, taka jak Git Flow, naprawdę jest anty-wzorcem?

30

Moja firma korzysta z Git i stosuje osobliwy schemat rozgałęziania - praca jest wykonywana w trybie głównym, a gałęzie są zarezerwowane dla wydań. Działa to dobrze, pod warunkiem, że cała praca wykonana w iteracji trafia do gałęzi, ale jeśli pojawi się krytyczny problem z produkcją, musimy upewnić się, że praca w jakiś sposób trafi do obu gałęzi.

Ostatnio bawiliśmy się z tymi gałęziami. To był administracyjny ból głowy, zapewniający, że cała praca trafia do każdej gałęzi, a niektóre błędy, które zostały naprawione w jednej gałęzi, nie przekształcają się w master, dopóki ktoś tego nie zauważy, co jest niepokojące.

Jakiś czas temu natknąłem się na Git Flow i wydaje mi się, że byłoby to rozwiązanie naszego problemu - kodu nie przesiąka aż do wydania lub od samego początku. Jedynym haczykiem jest to, że mój trop stwierdził, że tego rodzaju rozwój był anty-wzorcem - rozwijał się wściekle przez dwa tygodnie, a następnie wydał trzy, aby rozwiązać konflikty scalania.

Nie jestem do końca pewien, czy się zgadzam, a odkąd to podniosłem, praca została wznowiona jak zwykle. Dopiero niedawno mieliśmy z tym kilka poważnych problemów.

Chciałbym wiedzieć - dlaczego taki schemat rozwoju miałby być postrzegany jako anty-wzór? Czy to naprawdę jest anty-wzór?

Makoto
źródło
1
Sekcja „Reguła 3” ze starego posta na blogu Teda Dziuby może pomóc zilustrować, w jaki sposób może być anty-wzorcem.
Isxek,
5
IMO, im więcej czasu poświęcisz na kontrolę wersji, tym bardziej popełnisz błąd w przypadku całego użytkownika -> zjawisko narzędziowe.
Erik Reppen
@ErikReppen: Chciałbym oderwać uwagę wszystkich od kontroli wersji i mieć proces, do którego wszyscy mogą się przyzwyczaić. W ten sposób nie musimy martwić się o to, czy jest to anty-wzór, czy nie.
Makoto,
6
@Motooto Wszystko, co narusza KISS, jest anty-wzorem, IMO. Tutaj mocni użytkownicy VCS doprowadzają mnie do szału.
Erik Reppen
6
Termin „antypattern” jest swego rodzaju „najlepszą praktyką”, ponieważ często służy jako wymówka dla ludzi, którzy chcą wyłączyć mózg. Nie akceptuj tego pojęcia, jeśli prowadzący nie może jasno powiedzieć, jakie doświadczenie ma z tym i dlaczego jest zły.
Kyralessa

Odpowiedzi:

30

Odnosi się on głównie do części gałęzi funkcji modelu. Gałęzie funkcji zostały uznane za anty-wzorzec dawno temu, kiedy oddziały trwały miesiące, a systemy kontroli wersji nie mogły się połączyć, aby uratować im życie. Gałęzie funkcji trwające tydzień lub dwa mają znacznie mniej problemów, zwłaszcza jeśli w tym czasie ciągle się łączysz z develop gałęzią funkcji. Coś znacznie dłuższego niż to nadal nie jest zalecane.

Nawet jeśli nie używasz gałęzi operacji git flow, pozostałe części są przydatne w zapewnieniu czystych scaleń, a zmiany są propagowane we właściwym kierunku.

Karl Bielefeldt
źródło
3
Moje doświadczenie z gałęziami funkcji lub sposobem, w jaki to zrobiliśmy, jest to, że może im towarzyszyć ból serca, jeśli pozwolą im żyć dłużej niż iteracja. Reguła, która mówi, że wszystkie funkcje muszą być połączone w iteracji przed wydaniem, byłaby miła, aby złagodzić ból serca spowodowany połączeniami - i chłopcze, czy mieliśmy za sobą poważny ból serca ...
Makoto
6
Z mojego doświadczenia wynika, że ​​możesz mieć lokalne rzeczy leżące tak długo, jak długo będziesz je scalać z najnowszym masterem i / lub rozwijać odpowiednio.
Jan Hudec,
2
@JaHudec ... lub dopóki nie leżą dwie rzeczy, które są w jakiś sposób sprzeczne. Zawsze powinieneś mieć przegląd tego, co zostało zrobione ...
John
5
Trochę czytając o tym, a odniesienie Martina Fowlera wydaje się wskazywać, że gałęzie cech wykonane w ciągłym przepływie integracji mogą się sprawdzać - jeśli są wykonywane w mniejszych kęsach niż to, za co większość ludzi rozważałoby ich wykonanie. W pewnym sensie masz rację - mniej niż dwa tygodnie, ponieważ czas na życie w branży wydaje się odpowiedni. Nie rozumiem jednak, w jaki sposób same gałęzie cech są anty-wzorcem.
Makoto,
3
Masz rację. Są tylko anty-wzorcem, gdy żyją zbyt długo bez połączenia. Czasami ludzie wciąż szykują się z pomysłem, gdy nie pamiętają przyczyn.
Karl Bielefeldt,
21

Scalanie jest zabawną rzeczą - im rzadziej się to robi, tym trudniej, tym trudniej, tym bardziej ludzie będą się go bali, tym rzadziej będą to robić.

Rozwiązaniem jest albo nie zezwalaj oddziałom na zbyt duże odchylenie, albo nie używaj oddziałów.

Jeśli ludzie to zrozumieją, prawdopodobnie nie będziesz miał wielu problemów ze scaleniem, jeśli nie - być może gałęzie nie są dobrym pomysłem bez odrobiny edukacji.

maxim1000
źródło
1
Nie, nieużywanie gałęzi nie jest starterem. Inną podstawową kwestią byłoby to, że praca może być wykonywana w dwóch różnych miejscach w tym samym kodzie, więc mam nadzieję, że możemy zrobić coś, aby to złagodzić.
Makoto,
12
@moto, dość często oddzielanie elementów w kodzie sprawia, że ​​konflikty są rzadsze. Może to być albo zwykłe rozdzielenie funkcji na funkcje / klasy, albo więcej na wysokim poziomie, unikając nieudokumentowanych założeń między modułami. Następnie zmiany stają się bardziej zlokalizowane.
maxim1000
1
@ maxim1000 Zgadzam się. Myślę, że ktoś kiedyś powiedział coś w stylu „VCS jest alternatywą biednego człowieka dla architektury modułowej [odsprzęgniętej]”
8DH,
+1 za pierwszy akapit. I tak, bez edukacji gitflow przypomina ślepy zaułek
daitangio,