2013-06-05 7 views
6

Tło:przerywania połączenia pliku w Mercurial po zły plik podzielony

Początkowo był plik base.c i że plik był w repozytorium, który miał tylko jeden oddział Base.

Base został rozgałęziony, aby Extended -branch. Następnie ten nowy oddział wprowadził kilka zmian do base.c.

Jeśli błędy zostały naprawione w pliku base.c w Base, zostaną scalone do Extended.

Okazuje się, że dodanie zbyt wiele elementów do base.c w gałęzi Extended nie było dobrym pomysłem, więc plik jest kopiowany do ext.c. Następnie większość dodatków Extended została usunięta z funkcji base.c i Base z ext.c. W tym momencie base.c w Extended jest bardzo podobny jak w Base.

Problem:

Gdy plik został podzielony, Mercurial został poinformowany, że ext.c jest kopią base.c, bo mają wspólny historię. Niestety nie był to dobry pomysł.

Teraz, jeśli błędy są stałe na Base gałęzi i połączyły się Extended, Mercurial uważa, że ​​zmiany te powinny być stosowane zarówno base.c i ext.c, choć ten ostatni nie jest już ma żadnych podobieństw do pierwszego. To sprawia, że ​​scalenia są bardzo irytujące.

Czy istnieje sposób, aby powiedzieć Mercurialowi, że ext.c nie powinien już być uważany za taki sam jak base.c? Jednym z rozwiązań byłoby zastąpienie nowego pliku plikiem ext.c, ale historia nie nastąpiłaby.

+0

Interesujący problem. Zakładam, że zrobiłeś kopię za pomocą 'hg copy'? – icabod

+0

Tak, użyłem '' hg copy'. – user694733

+4

Możesz przerwać połączenie, jeśli zapomnisz ext.c', a następnie 'hg add' to jako nowy plik ... ale wtedy stracisz całą historię do tego momentu. Możesz jednak dodać _earlier_ wersję 'ext.c' (może nawet przed zmianą nazwy) i odtworzenie (przeszczep) to historia od tego czasu. – alexis

Odpowiedz

2

Możesz zerwać połączenie z hg forget ext.c, a następnie hg add ext.c jako nowy plik. Ale jeśli zrobisz to z wersją końcówki ext.c, utracisz całą historię do tego momentu.

Zamiast tego można dodać wcześniejszą wersję ext.c, może nawet sprzed zmiany nazwy i odtworzyć (przeszczep) jej historię od tego czasu. Można dodać historię ext.c jako oddział do ostatniego przeglądu, i połączyć je w końcówce:

---o---o---o---(tip)--(merge) 
    \    /
    e---e---e ... e 

A może to nie ma znaczenia, a może po prostu dodać historię ext.c do bieżącego tip:

---o---o---o---(tip)--e--e--e--e 

Żadna z tych metod polega na jakąkolwiek historię przepisywanie (zwanego dalej „zapomniał” wersja ext.c jest tylko lewy jako ślepy zaułek), więc nie powinno być żadnych problemów ze zmianami rozmnożeniowego.