2013-05-31 9 views
5

Chciałbym zaszczepić changeset Merge:Jak zaszczepić changeset scalania z Mercurial

$ hg graft -UD --log -r 1909 
skipping ungraftable merge revision 1909 

Moje obejście jest:

hg export -r 1909 | hg import - 
hg commit -m"$(hg log -r 1909 --template 'grafted {node}')" 

Czy istnieje jakiś powód, że szczepienie changeset seryjnej nie jest obsługiwany ?

Odpowiedz

3

Zestawy zmian scalania mają dwóch rodziców, a zatem dwa różne sposoby patrzenia na to, co się zmieniło. Domyślnie, jeśli użyjesz hg diff -c <changeset>, pokaże różnicę w porównaniu do pierwszego elementu nadrzędnego, który zazwyczaj reprezentował katalog roboczy w czasie scalania. Jeśli to założenie jest błędne, jest to łatwy sposób na wprowadzenie błędów.

To prowadzi do pytania, dlaczego przeszczepiasz zestaw zmian scalania, a nie oryginalne zestawy zmian. Jeśli istnieje szereg zestawów zmian, które chcesz przeszczepić i używasz zestawu zmian scalania do "zrolowania" tej serii, możesz zaimportować oryginalne wiele zmian naraz: hg graft "1000::1005".

Osobiście zazwyczaj korzystają hg rebase dla zadań, takich jak ten, mimo że wymaga umożliwiając rozszerzenie rebase w swoim hgrc lub mercurial.ini:

[extensions] 
rebase= 
+4

Motywacja jest to, że szczepienie changeset scalania jest łatwiejsze niż scalanie przeszczepianie poszczególnych zestawów zmian. Są też sytuacje, w których przeszczepianie poszczególnych zestawów zmian z drugiej gałęzi nie jest oczywiste. W moim przypadku rebase nie ma zastosowania. Zestawy zmian są już publiczne. –

+0

Mam scalania, gdzie były trudne do rozwiązania konflikty scalania. Chcę wiedzieć, jak przełączyć ten zestaw zmian scalania z powrotem, ponieważ rozdzielczość działałaby przeciwko starszemu p1() zamiast przerabiać pracę rozwiązania konfliktu scalania, ale brzmi jak to nie jest opcja. – binki