2010-10-27 11 views
6

Mam repozytorium Mercurial z czterema gałęziami w nim. Jednym z nich jest "wspólna" gałąź, pozostałe trzy to "specyficzne" gałęzie, które składają się z kilku kosmetycznych zmian zastosowanych do wspólnej gałęzi. Jedna z tych kosmetycznych zmian polegała na zmianie nazwy niektórych plików.Mercurial: jak scalić zmiany w pliku, którego nazwa została zmieniona w innym oddziale?

Więc wspólna gałąź ma "plik.txt", a pierwsza konkretna gałąź ma "plik-01.txt", który jest tym samym plikiem, używany do tego samego celu, ale ma inną nazwę i nieco inną zawartość . Został przemianowany na file-01.txt w konkretnym oddziale, a "hg log -f plik-01.txt" poprawnie pokazuje historię wracającą przed zmianą nazwy.

Kiedy dokonuję zmiany w pliku.txt na wspólnej gałęzi, muszę móc scalić tę zmianę do pliku-01.txt w określonym oddziale. Ale Mercurial nie rozumie, że pliki są takie same. Mówi mi:

zdalnego zmieniony plik.txt która lokalny usunięte

zastosowanie (c) wersja powieszono lub opuścić (d) eleted?

Jeśli wybiorę "c", otrzymam nowy plik.txt zawierający dokładnie to, co jest w wersji wspólnej gałęzi. Jeśli wybiorę "d", zmiana nie zostanie w ogóle scalona.

Co mogę zrobić, aby to naprawić?


EDYCJA: Mogę sprawić, aby działało poprawnie w nowym repozytorium testów, ale nie moje rzeczywiste repozytorium. Oto, co otrzymuję (zauważ, że rev 118 znajduje się w konkretnej gałęzi, tuż przed oryginalną zmianą nazwy, więc ponownie przeglądam proces zmiany nazwy, aby zilustrować):

C: \ ...> aktualizacja hg aktualizowany -C 118

0 plików, 0 plików połączone, usunięte pliki, 0, 0 plików nierozwiązanych

C: \ ...> hg scalić Wartość domyślna

łączące plik.txt
łączących anotherfile.txt
0 plików aktualizacja d, 2 pliki połączone, usunięte pliki, 0, 0 plików nierozwiązane
(oddział seryjnej, nie zapomnij, aby popełnić)

Tak to działa bez zmiany nazwy. Ale jeśli zmiana nazwy, to nie:

C: \ ... Hg> Aktualizacja -C aktualizowany 118

2 pliki, 0 plików połączone, usunięte pliki, 0, 0 plików rozwiązany

C : \ ...> hg przemianować plik.txt plików 01.txt
C: \ ...> hg commit -m "przemianowany na"

stworzył nową głowicę

C: \ ...> domyślne połączenie hg

Zdalny zmieniony plik.txt który lokalny usunięty
użyć (c) powieszony wersji lub urlopu (d) eleted?


EDIT 2: Oto co mam na tym ostatnim etapie z hg merge --debug default:

szukasz kopii z powrotem do rev 115
niedopasowane pliki w lokalnym:
file-01.txt
wszystkie znalezione kopie (* = do scalenia,! = Divergent):
plik-01.txt -> plik.txt

sprawdzanie katalogu zmienia nazwę
rozwiązywanie manifesty
nadpisywania Brak częściowego fałszywy
przodka 9d979018c2df lokalnej f842fdbc252b + zdalnego 05fc75e480da
anotherfile.txt: wersje różnią -> m
zdalnego zmieniło plik.txt która lokalny usunięte
wykorzystania (c) zawieszona wersja lub pozostawić (d) eleted?

+0

To dziwne, ponieważ Mercurial normalnie wie, jak scalić zmiany w pliku o zmienionej nazwie. Oto sprawdzony przykład, który możesz spróbować zweryfikować: http://mercurial.aragost.com/kick-start/tasks.html#merging-default-into-a-branch Nie wiem, co się stało w twoim przypadku , chociaż. –

Odpowiedz

0

Skończyło się na śledzeniu problemu do jednej konkretnej wersji w historii: mogłem scalić całą nazwę, dopóki ta wersja nie była zaangażowana. Nadal nie jestem pewien, co poszło nie tak z tą wersją, ale zmieniłem zmiany i teraz to działa.

0

Problem dotyczy sposobu obsługi zmiany nazwy w oddziale. Z jego wyglądu Ty (lub GUI) zrobiłeś "usuń" ze starej nazwy, plik.txt, a następnie dodałeś kopię tego pliku o nazwie plik-01.txt.

Kiedy robisz to w ten sposób, mercurial nie ma pojęcia, że ​​są ze sobą powiązane. Jeśli jednak trzeba było, w branży, używane polecenia:

hg rename file.txt file-01.txt 

wówczas zamiast komunikatu jesteś widząc zmiany od plik.txt będzie stosowana do plików 01.txt. Jednak bez twojej pomocy mercurial nie może wiedzieć, że są ze sobą powiązane.

+1

"handed" -> "handled"? –

+1

Nie wiem, co jest nie tak, ale mówi on, że 'hg log -f file-01.txt' poprawnie śledzi historię z powrotem przez * zmianę nazwy * ... co pozwala mi sądzić, że zmienił nazwę poprawnie. –

+0

Tak, domyślam się, że została zmieniona w GUI przeglądarki plików, a następnie dostałem add/remove z IDE. Jeśli się mylę, to z pewnością jest coś głębszego, ale domyślam się, że "zmiana hg" nie była używana. Wprawdzie to przeczucie. –

Powiązane problemy