Dlaczego nie wprowadzasz natychmiast scalonych zmian?

16

Moje biuro używa Git i SourceTree do kontroli wersji. Stało się tak, ponieważ kiedy dołączyłem, kontrola wersji była zerowa, a SourceTree był jedynym systemem, z którego kiedykolwiek korzystałem. W żadnym wypadku nie jestem ekspertem, ale jestem najbardziej doświadczonym z moich współpracowników, więc jestem de facto ekspertem odpowiedzialnym za uczenie wszystkich prawidłowego korzystania z Git i naprawiania popełnianych błędów.

Tworzę dokument instruktażowy, który przechodzi przez Git i SourceTree i wyjaśnia każdy etap tego procesu. W procesie pobierania okno dialogowe SourceTree pozwala wybrać opcję „Natychmiast zatwierdzaj scalone zmiany”. Rozumiem, co to robi i dlaczego jest przydatne. Nie rozumiem, dlaczego nikt nie chciałby korzystać z tej funkcji.

Czy ktoś mógłby wyjaśnić, dlaczego nigdy nie chcesz, aby scalone zmiany były zatwierdzane automatycznie? Staram się zrozumieć uzasadnienie, aby móc lepiej wyjaśnić przydatność funkcji i dowiedzieć się, na jakie pułapki należy zwrócić uwagę w przyszłości.

Edycja: Nie sądzę, aby moje pytanie było duplikatem połączonego pytania. W powiązanym pytaniu ogólnie pyta się, jak często popełniać. Pytam o to, dlaczego ktoś nie chciałby używać konkretnej funkcji związanej z zatwierdzaniem scalania w SourceTree.

David K.
źródło
1
Chcesz dobrych powodów? Ponieważ mogę podać różne powody, aby opóźnić sprawdzanie kodu, o którym słyszałem, że ludzie mówią na wolności, ale kilka z nich to dobre powody.
whatsisname
Jedynym powodem, dla którego mogę wymyślić, jest niepowodzenie scalania z powodu konfliktów scalania. Ale SourceTree nie zgodzi się, jeśli tak się stanie.
Robert Harvey
Na marginesie: dlaczego piszesz własny samouczek? bitbucket ma już świetny samouczek. confluence.atlassian.com/bitbucket/…
winkbrace
@winkbrace Nie używamy Bitbucket; trzymamy wszystko w sieci lokalnej. Robię referencyjnego wielką samouczek Atlassian jest , ale chciałem coś trochę bardziej zwięzły mogę przekazać osobom, które były nowe i Git do kontroli wersji. To tak naprawdę wprowadzenie i procedura „oto jak i dlaczego popełniasz / push / pull / etc”, aby ludzie mogli zacząć działać.
David K

Odpowiedzi:

26

Nie chciałbym korzystać z tej funkcji.

Brak konfliktów oznacza, że ​​zmiany scalane w moim oddziale nie są mniej więcej tymi samymi wierszami kodu, co te, które wprowadziłem. Nie oznacza to, że zmiany te są zgodne z moimi zmianami. Nie oznacza to, że kod się skompiluje, że kod będzie działał, ani że testy przejdą pomyślnie.

Innymi słowy, korzystając z tej opcji, potencjalnie mogę uzyskać fałszywe zatwierdzenie kodu, który może nie być w dobrym stanie i który wymaga nowego zatwierdzenia do naprawy. Ponieważ i tak wykonuję tę pracę, a ponieważ nigdy nie powinienem przesuwać tego fałszywego zatwierdzenia w górę, nawet przez pomyłkę (Boże, zabraniaj, ktoś może następnie połączyć to z inną gałęzią!), Nie widzę powodu, aby tworzyć to zatwierdzenie w pierwszej kolejności miejsce.


źródło
Przypuszczalnie tworzysz gałęzie funkcji, a nie łączysz każdej małej zmiany z gałęzią główną. Połączenia prawdopodobnie nie powodują konfliktów w gałęzi funkcji, chyba że wiele osób pracuje nad tą samą klasą w tej samej gałęzi funkcji.
Robert Harvey
4
@RobertHarvey Tak, ale prawdopodobnie często łączę główny oddział z moim oddziałem. W twoim komentarzu ukryte jest założenie, że różne funkcje będą naturalnie dotykać różnych klas / modułów, ale nie każdy ma szczęście. Przez (nie) fortunę masz gdzieś klasę Bożą, którą każdy, kto coś robi, musi się dotknąć i nie możesz wiele z tym zrobić. Istnieją również funkcje przekrojowe (uaktualnij bibliotekę, z powodu której jeden na każde 10 wierszy kodu musi się zmienić ...) Znam argument „staraj się nie dostać”, ale co, jeśli już tam jesteś? Lepiej dmuchać na zimne.
2

Po scaleniu mogą wystąpić zmiany w plikach w lokalnym repozytorium. Zmiany te nie są automatycznie zatwierdzane na poziomie lokalnym, chyba że ustawisz opcję „Zatwierdź scalone zmiany natychmiast”.

Jeśli nie ustawisz tej opcji, pliki pojawią się w SourceTree jako niezatwierdzone zmiany.

Wynika to z faktu, że sam Git nie zatwierdza, chyba że wyraźnie to powiesz, a SourceTree jest graficznym interfejsem Git. W „natychmiast popełnić scalone zmiany” opcja jest nie tyle opcją, ponieważ jest to skrót poleceń.

Powód, dla którego nie chcesz korzystać z tej funkcji, jest oczywisty: chcesz wykonać zatwierdzenie ręcznie lub wcale.

Powiedzmy, że przyciągasz mistrza do gałęzi funkcji. Współpracownik pracuje nad inną gałęzią funkcji. Ten współpracownik ma historię łamania rzeczy. Scalanie zawiera zmiany we wspólnym wspólnym kodzie wprowadzone przez tego współpracownika. Zatem ty - wraz z resztą zespołu - nie zatwierdzasz scalonych zmian, dopóki nie będziesz pewien, że współpracownik nie wprowadzi żadnych zmian, które wpłynęłyby na twoją pracę.

Tylko dlatego, że nie ma dobrego powodu - w teorii - aby nie korzystać z tej funkcji, w rzeczywistości może istnieć wiele dobrych powodów. Jeśli chodzi o twój samouczek, powiem tylko, że „99 razy na 100, jest to opcja, której chcesz użyć”. Nie sądzę, że naprawdę musisz szczegółowo omawiać nieużywanie go, zwłaszcza jeśli inni nie znają kontroli wersji. Wszystko zależy od tego, jak dokładnie zamierzasz być w samouczku.

Mark Benningfield
źródło
2

Jeśli używasz haka po zatwierdzeniu do automatycznego wypychania zatwierdzeń (jak w /programming//a/7925891/6781678 ), możesz potrzebować tej opcji, aby uniknąć popychania niektórych podejrzeń o wątpliwej jakości.

Nigdy bym tego nie użył.

Philippe
źródło