2009-03-26 10 views
17

Czy istnieje sposób na pełne sterowanie ręczne procesem scalania w Mercurial?Całkowicie ręczny Mercurial merge

Chcę mieć możliwość wyboru kierunku scalania plików, nawet w przypadku plików bez konfliktów. Czy to możliwe?

Odpowiedz

20

Włącz "wstępne scalanie" w konfiguracji scalania. Wtedy wszystko liczy się jako konflikt i możesz wybrać "lewo" lub "prawo" dla każdej zmiany pliku.

[merge-tools] 
mymergetool.premerge = False 

z MergeToolConfiguration on the Mercurial wiki.

+0

Teraz możesz wypróbować 'hg merge --tool internal: prompt' –

+0

Prawdopodobnie pomogłoby to komuś, ponieważ ani powyższy fragment niżej nie pomógł mi. Dodałem opcję "[ui] -> merge = internal: merge" i całkowicie wyłączono narzędzia do rozwiązywania problemów po nieudanym scaleniu. Właściwie to [to] (http://i.stack.imgur.com/WNHq4.png) irytujące narzędzie zaczęło się pojawiać po aktualizacji mojej wersji Mercurial. – ivkremer

2

Scalenie jest zawsze wykonywane między wersją nadrzędną katalogu roboczego a inną wersją, domyślnie drugą głowicą w repozytorium.

Jeśli chcesz połączyć się z innym „w kierunku” można zmienić której oddział znajduje się w katalogu roboczym poprzez sprawdzanie konkretną wersję:

hg update -r [rev] 

aby zobaczyć, który stoi na czele masz w repozytorium uruchomić następujące polecenie:

hg heads 

Ewentualnie, jeśli używasz fetch można użyć opcji --switch-parent scalić w innym kierunku:

hg fetch --switch-parent 

Nie można zmienić kierunku scalania dla poszczególnych plików, ponieważ Mercurial współpracuje ze zmianami, które mają wpływ na całe repozytorium, a nie na śledzenie zmian poszczególnych plików, takich jak CVS.

+1

Widzę, że przyjął twoją odpowiedź, ale nie sądzę, że to jest to, o co prosił. Powiedziałeś mu, jak wybierać "lewo" lub "prawo" dla wszystkich nie-konfliktów, ale jeśli chce on mieszać i dopasowywać, musi wyłączyć wewnętrzne "wstępne scalenie" przed uruchomieniem narzędzia do scalania. –

12

edycji pliku konfiguracyjnego w ten sposób:

[ui] 
merge = kdiff3 

[merge-tools] 
kdiff3.premerge = false 
kdiff3.args=--L1 base --L2 local --L3 other $base $local $other -o $output 

Domyślnie to stawia --auto argumentu na KDiff3 tak KDiff3 scala samochodowych.

+0

+1, ponieważ walczę z tym przez pół godziny, a ty jesteś pierwszą osobą, która zaleca usunięcie argumentu '--auto'. Znalezienie go zajęłoby mi całą wieczność (jak już tęskniłem za każdym razem, potrzebowałem ręcznego scalenia). –

1

W przypadku KDiff3 ważne jest dodanie opcji --qall (patrz http://kdiff3.sourceforge.net/doc/documentation.html). Nastąpi automatyczne scalenie niektórych konfliktów bez tego klucza (jak "Automatyczne rozwiązywanie prostych konfliktów" z "Scalenie" menu). Tak więc im bardziej właściwa linia poleceń to:

[ui] 
merge = kdiff3 

[merge-tools] 
kdiff3.premerge = False 
kdiff3.args=$base $local $other -o $output --L1 base --L2 local --L3 other --qall