Pochodzę z rtęci, używam gałęzi do organizowania funkcji. Oczywiście chcę zobaczyć ten przepływ pracy również w mojej historii.
Rozpocząłem nowy projekt za pomocą git i zakończyłem swoją pierwszą funkcję. Podczas łączenia tej funkcji zdałem sobie sprawę, że git używa szybkiego przewijania do przodu, tzn. Jeśli to możliwe, stosuje moje zmiany bezpośrednio do gałęzi master i zapomina o mojej gałęzi.
Pomyślmy więc o przyszłości: tylko ja pracuję nad tym projektem. Jeśli użyję domyślnego podejścia git (łączenie w przód), moja historia zaowocuje jedną gigantyczną gałęzią master. Nikt nie wie, że użyłem osobnej gałęzi dla każdej funkcji, ponieważ w końcu będę miał tylko tę gigantyczną gałąź główną. Czy to nie będzie wyglądać nieprofesjonalnie?
Zgodnie z tym rozumowaniem nie chcę łączenia szybkiego i nie mogę zrozumieć, dlaczego jest to ustawienie domyślne. Co w tym takiego dobrego?
źródło
no-ff
” z „zatwierdzeniem punktu kontrolnego”, który łamie bisect lub winę.-no-ff
rzadko jest dobrym pomysłem, ale nadal może pomóc zachować wewnętrzną historię funkcji, jednocześnie rejestrując tylko jedno zatwierdzenie w głównej gałęzi. Ma to sens w przypadku długiej historii funkcji, gdy od czasu do czasu scalasz jej postęp w głównej gałęzi.Odpowiedzi:
Scalanie do przodu ma sens w przypadku krótkotrwałych gałęzi, ale w bardziej złożonej historii scalanie bez szybkiego przewijania może ułatwić zrozumienie historii i ułatwić przywrócenie grupy zatwierdzeń.
Ostrzeżenie : niezwiązane z szybkim przekazywaniem ma również potencjalne skutki uboczne. Zapoznaj się z https://sandofsky.com/blog/git-workflow.html , unikaj „no-ff” z jego „punktami kontrolnymi zatwierdzeń”, które łamią bisect lub winę, i dokładnie zastanów się, czy to powinno być twoje domyślne podejście
master
.(Od nvie.com , Vincent Driessen , post „ Udany model rozgałęziania Git ”)
Jakub Narębski również wspomina się config
merge.ff
:Szybkie przewijanie do przodu jest domyślne, ponieważ:
Ale jeśli spodziewasz się iteracyjnego przepływu pracy dla jednej gałęzi tematów / funkcji (tj. Scalam, a następnie wrócę do tej gałęzi funkcji i dodam więcej zatwierdzeń), to przydatne jest włączenie tylko scalania w gałęzi głównej, a nie wszystkie pośrednie zatwierdzenia gałęzi cech.
W takim przypadku możesz zakończyć konfigurowanie tego rodzaju pliku konfiguracyjnego :
OP dodaje w komentarzach:
Jefromi odpowiada:
Ogólniej dodaję:
W rzeczywistości, jeśli weźmie się pod uwagę model gałęzi Mercurial, jest on w centrum jednej gałęzi na repozytorium (nawet jeśli można tworzyć anonimowe nagłówki, zakładki, a nawet nazwane gałęzie )
Patrz „Git i Mercurial - Porównaj i skontrastuj” .
źródło
feature
oddziału do publicznego repozytorium, możesz bazować na nimmaster
tyle razy, ile chcesz. Zobacz stackoverflow.com/questions/5250817/…feature
oddziału z powrotemmaster
, sprawia, że wspomniana historia jest liniowa, czy nie. Proste szybkie łączenie sprawi, że będzie liniowe. Ma to sens, jeśli wyczyściłeś historię tegofeature
oddziału przed scaleniem do przodu, pozostawiając tylko znaczące zatwierdzenia, jak wspomniano w stackoverflow.com/questions/7425541/... .Pozwól mi rozwinąć trochę na VonC „s bardzo wyczerpującą odpowiedź :
Po pierwsze, jeśli dobrze to pamiętam, fakt, że Git domyślnie nie tworzy zatwierdzeń scalania w przypadku szybkiego przewijania , wynika z rozważenia „równych repozytoriów” jednej gałęzi, w których do synchronizacji tych dwóch repozytoriów używa się wzajemnego ściągania (a przepływ pracy można znaleźć jako pierwszy przykład w dokumentacji większości użytkowników, w tym w „Podręczniku użytkownika Git” i „Kontrola wersji według przykładów”). W tym przypadku nie używasz pull do scalenia w pełni zrealizowanej gałęzi, używasz jej do nadążania za innymi pracami. Nie chcesz mieć efemerycznego i nieistotnego faktu, gdy akurat synchronizacja jest zapisywana i przechowywana w repozytorium, zapisanym na przyszłość.
Zauważ, że użyteczność gałęzi funkcji i posiadania wielu gałęzi w pojedynczym repozytorium pojawiła się dopiero później, z bardziej rozpowszechnionym użyciem VCS z dobrą obsługą scalania i próbowaniem różnych przepływów pracy opartych na scalaniu. Dlatego na przykład Mercurial początkowo obsługiwał tylko jedną gałąź w repozytorium (plus anonimowe wskazówki dotyczące śledzenia zdalnych gałęzi), jak widać w starszych wersjach „Mercurial: The Definitive Guide”.
Po drugie, kiedy po najlepszych praktyk wykorzystania oddziałów fabularnych , a mianowicie, że gałęzie fabularne powinny początek od stabilnej wersji (zwykle od ostatniego wydania), aby móc cherry-pick and wybrać, które funkcje do włączenia przez Wybieranie funkcji oddziałów scalić, ci zwykle nie znajdują się w sytuacji szybkiego przewijania do przodu ... co sprawia, że ten problem jest dyskusyjny. Musisz się martwić tworzeniem prawdziwego scalenia, a nie przewijaniem do przodu podczas scalania pierwszej gałęzi (zakładając, że nie wprowadzasz zmian pojedynczego zatwierdzenia bezpośrednio w 'master'); wszystkie inne późniejsze fuzje odbywają się oczywiście w sytuacji bez szybkiego przewijania.
HTH
źródło