Rozwiązywanie konfliktów: jak automatycznie akceptować „ich” zmiany?

97

Podczas scalania sprzecznych zmian za pomocą hg mergeMercurial wstawia zestaw znaczników do plików, które mają zostać scalone w mojej kopii roboczej, w następujący sposób:

<<<<<<< local
  version = 0.2
=======
  version = 0.1
>>>>>>> other

Następnie ręcznie edytuję wszystkie pliki oznaczone jako U z listy utworzonej przez, hg resolve --all -la następnie mówię mercurialowi, że rozwiązałem je przezhg resolve -m file1 file2 file3 ...

W wielu sytuacjach chciałbym jednak zaakceptować tylko moje lub ich jedyne zmiany w niektórych sprzecznych plikach. Myślę o stworzeniu dwóch prostych skryptów sed / awk / o jakiejkolwiek nazwie accept-theirs.shi accept-my.shczy jest na to „właściwy” sposób?

psihodelia
źródło

Odpowiedzi:

166

Posługiwać się

hg resolve -t internal:other --all

zaakceptować theirsi

hg resolve -t internal:local --all

akceptować yours

Noffls
źródło
Dziękuję Ci bardzo! Nie rozumiem, co oznacza @djc, ale Twoje rozwiązanie działa jak urok.
psihodelia
@psihodelia djc powiedział prawie to samo, spróbuj hg help merge-tools(connectetools jest aliasem w ostatnich wersjach)
MGP
6
Na marginesie, pseudonim to:[alias] mine = resolve -t internal:local theirs = resolve -t internal:other
Melvyn
1
To są trzy linijki do dodania do własnych .hgrc, dla początkujących: [alias]więc mine = resolve -t internal:local, więc theirs = resolve -t internal:other. Następnie możesz użyć hg mine some_file.pylub hg theirs -a(dla wszystkich)
Tobia
1
Od phab.mercurial-scm.org/D4379 może być również konieczne dołączenie --re-mergeflagi (np. hg resolve -t internal:other --re-merge --all)
Ethan Koenig
23

Spróbuj tego:

hg merge --tool 'internal:other'

Zobacz także, hg help merge-toolsaby uzyskać więcej informacji.

djc
źródło
1
Lub resolvedla pojedynczych plików / ponownego wykonania. (Również cytaty wokół internal:othersą niepotrzebne.)
Chris Morgan