Dlaczego to nie istnieje?
Chociaż wspominam w „ poleceniu git, aby uczynić jedną gałąź podobną do drugiej ”, jak symulować git merge -s theirs
, zauważcie , że Git 2.15 (IV kwartał 2017) jest teraz jaśniejszy:
Dokumentacja „ -X<option>
” dla połączeń została wprowadzona w błąd, sugerując, że „ -s theirs
” istnieje, co nie jest prawdą.
Zobacz zatwierdzenie c25d98b (25 września 2017 r.) Autor: Junio C Hamano ( gitster
) .
(Połączone przez Junio C Hamano - gitster
- w commit 4da3e23 , 28 września 2017)
strategie scalania: unikaj sugerowania, że „ -s theirs
” istnieje
Opis -Xours
opcji scalania zawiera nawias, który mówi czytelnikom, że jest bardzo różny od -s ours
, co jest poprawne, ale opis -Xtheirs
po nim niedbale mówi „to jest przeciwieństwo ours
”, dając fałszywe wrażenie, że czytelnicy również potrzebują Ostrzegam, że jest bardzo różny od -s theirs
, który w rzeczywistości nawet nie istnieje.
-Xtheirs
jest opcją strategiczną stosowaną do strategii rekurencyjnej. Oznacza to, że strategia rekurencyjna będzie nadal łączyć wszystko, co może, i powróci do theirs
logiki tylko w przypadku konfliktu.
Ta debata na temat znaczenia lub braku theirs
strategii scalania została niedawno przywołana w tym wątku z września 2017 r .
Uznaje starsze (2008) wątki
Krótko mówiąc, poprzednią dyskusję można streścić w „nie chcemy” -s theirs
, ponieważ zachęca to do niewłaściwego przepływu pracy ”.
Wspomina o aliasie:
mtheirs = !sh -c 'git merge -s ours --no-commit $1 && git read-tree -m -u $1' -
Jarosław Halczenko próbuje raz jeszcze opowiedzieć się za tą strategią, ale Junio C. Hamano dodaje :
Powodem, dla którego nasz i ich nie są symetryczne, jest to, że jesteście sobą, a nie nimi --- kontrola i własność naszej historii i ich historii nie jest symetryczna.
Gdy zdecydujesz, że ich historia jest główną linią, wolisz traktować swoją linię rozwoju jako gałąź boczną i dokonać scalenia w tym kierunku, tj. Pierwszy rodzic wynikowego scalenia jest zatwierdzeniem ich historii, a drugi rodzic jest ostatnim złym w twojej historii. Więc użyjesz „ checkout their-history && merge -s ours your-history
”, aby zachować rozsądek dla pierwszego rodzicielstwa.
I w tym momencie użycie „ -s ours
” nie jest już obejściem problemu z powodu braku „ -s theirs
”.
Jest to właściwa część pożądanej semantyki, tzn. Z punktu widzenia ocalałej kanonicznej linii historii chcesz zachować to, co ona zrobiła, niwecząc to, co zrobiła druga linia historii .
Junio dodaje, jak komentuje Mike Beaton :
git merge -s ours <their-ref>
skutecznie mówi „zatwierdzanie znaków dokonane <their-ref>
w ich oddziale jako zobowiązanie do trwałego zignorowania”;
i to ma znaczenie, ponieważ jeśli następnie scalisz z późniejszych stanów ich gałęzi, ich późniejsze zmiany zostaną wprowadzone bez zignorowanych zmian .