Powiedzieć wiele oddziałów są opracowywane, A
a B
, a także przyrostowe „bug fix” oddział C
.
Teraz C
jest już „gotowy” i scalony w master. A
i B
wciąż są w fazie rozwoju i nie zostaną naprawione, zanim (być może) kolejna gałąź naprawy błędów nie zostanie połączona z master.
Czy dobrym pomysłem jest C
jak najszybsze scalenie w nowych gałęziach funkcji? Aby nowe funkcje były master
jak najbliżej? Czy może lepiej pozwolić, by nowa funkcja została opracowana we własnym „świecie” dopiero po zakończeniu?
W każdym razie będą konflikty, więc trzeba poświęcić czas na ich naprawienie.
version-control
branching
merging
paul23
źródło
źródło
Odpowiedzi:
Im dłużej gałąź żyje, tym bardziej jest w stanie odejść od gałęzi głównej, a bałagan i bardziej skomplikowane, powstałe scalenie nastąpi, gdy w końcu zostanie zakończone. Dziesięć małych konfliktów jest łatwiejszych do rozwiązania niż 1 ogromny konflikt i może faktycznie uniemożliwić programistom kopiowanie lub marnowanie wysiłku. Biorąc to pod uwagę, powinieneś łączyć
master
sięA
iB
regularnie; raz dziennie jest dość powszechną rekomendacją, ale jeśli masz dużo aktywności w swoich oddziałach, możesz chcieć połączyć kilka razy dziennie.Oprócz ułatwienia rozwiązywania konfliktów, w szczególności wspominasz
C
o gałęzi z poprawkami błędów. Jako programista chciałbym, aby mój oddział miał wszystkie najnowsze poprawki błędów, aby upewnić się, że nie powtarzam zachowania prowadzącego do błędu ani nie piszę testów opartych na błędnych danych.Jeśli wiesz, że będą konflikty, możesz zastosować inną strategię rozgałęziania. Przechowuj wiele zmian w tym samym pliku (plikach) w tej samej gałęzi, gdy tylko jest to możliwe, a redukujesz lub eliminujesz liczbę konfliktów. Zmodernizuj historie, aby były w pełni niezależne, o ile to możliwe, i przerób gałęzie, aby ewentualnie obejmowały wiele historii (gałąź, cecha i historia nie zawsze są wymienne).
źródło
Zakładając, że masz zamiar ostatecznie połączyć A, B z powrotem w master i utrzymywać jedną bazę kodu, nigdy nie jest dobrym pomysłem zbyt duże odstępstwo od master. Zbyt długie odstępstwo od głównego, zwłaszcza gdy poprawki błędów i inne prace rozwojowe łączą się z głównym w trakcie opracowywania A, B, z pewnością spowoduje konflikty.
Rozważę strategie podobne do następujących
źródło
Zwykle często jest lepszy niż masywny.
Mniejsze, częstsze żądania ściągania są prawie zawsze lepsze.
Zacząłem używać flag konfiguracji przede wszystkim po to, aby móc wykonywać wczesne mniejsze żądania ściągania, aby z kolei móc łatwiej scalać kod, ale pozostawić tę funkcję nieaktywną. Im mniejsze żądanie ściągnięcia, tym łatwiej jest przejrzeć kod, nawet jeśli jest więcej żądań ściągnięcia ogółem. Większość ludzi nie będzie w stanie dokonać sensownych recenzji masowych żądań ściągnięcia. To zbyt trudne dla pamięci RAM, aby zrozumieć wszystkie możliwe implikacje ogromnej zmiany kodu.
Tworzenie flagi konfiguracji wiąże się z dodatkowymi kosztami, więc w przypadku mniejszych funkcji nie warto. Ale wtedy twoje żądanie ściągnięcia i tak będzie niewielkie.
Mogą jednak wystąpić sytuacje, w których funkcja musi zostać wypuszczona jednocześnie. Nawet wtedy może być lepiej wykonać mniejsze żądania ściągania do innego oddziału wykonanego w tym celu.
Większość moich kolegów jęczy, gdy ktoś wysyła masowe żądanie ściągnięcia, i w większości słusznie.
Zauważ też, że czasami muszę wybijać zobowiązania do oddzielnych gałęzi. Jeśli to, co musi zostać zebrane w wiśni, można umieścić w jednym zatwierdzeniu, ułatwia to przenoszenie go do innych gałęzi. Jest to przypadek, w którym posiadanie niewielkiej liczby zatwierdzeń jest lepsze, ale nie jest to dokładnie standardowy proces, jeśli wybieracie wiśnię.
źródło
W Refactoring autorstwa Martina Fowlera rada, której udziela, nigdy nie pozwala rozgałęzić się od mistrza na dłużej niż jeden dzień. IIRC, powinieneś wprowadzić małą zmianę, przetestować, aby upewnić się, że niczego nie złamałeś, a następnie scalić z powrotem.
źródło
A
iB
przeprowadzaj gruntowne nowe zmiany w działaniu aplikacji, nie zostaną one „wykonane” w ciągu miesiąca. Jednak są też bezużyteczne, zanimInną opcją dla naprawdę długo trwających zmian, które mogą być zakończone, ale nie są gotowe do użycia, jest umieszczenie ich za flagą funkcji, aby można je było scalić w celu opanowania, ale nie ma ryzyka uszkodzenia niczego. Następnie, gdy są gotowe do użycia, można usunąć flagę funkcji.
źródło