Jest alternatywą do edycji historii (aka mucking w MQ) do mocowania zmienia nazwę. Procedura ręczna jest określona jako here jako logika, której używa rozszerzenie fixrenames.
Proces ręczny wygląda następująco. Dla każdej wersji N, dla której nie ma nazw oznaczonych:
$ hg update n-1
$ hg revert --all --rev n
$ hg addremove -s 70
$ hg commit -m "Fix renames from n"
$ hg merge n
Pamiętaj, że flaga podobieństwa czasami wymaga gry na skrzypcach. Powodem jest to, że nazwy prawie nigdy nie są czystymi nazwami. Na przykład zmiana nazwy klasy wymaga zmiany w pliku, jak również zmiany nazwy pliku. W związku z tym nie są w 100% takie same. Będziesz musiał sprawdzić, co robi addremove i upewnić się, że dodane pliki są oznaczone jako "X (zmieniono nazwę z Y)".
W ten sposób można odzyskać pełną historię bez ręcznej pracy. Musiałem to zrobić dzisiaj (bez korzystania z rozszerzenia fixrenames) i zajęło mi to około 5 minut, aby naprawić.
Można nawet zastosować tę procedurę, gdy istnieją zestawienia złożone, które należy naprawić.
Wykres zestawu zmian wyglądałby tak: Rozważmy Zestawienia zmian A, B, C, D. & B i D nie miały nieprawidłowych Zmienia nazwę:
D
|
C
|
B
|
A
Najpierw aktualizacji A, wykonać Ustalone przywrócić B wykonać addremove i zobowiązać się w E. Następnie połączyć C do E jak F, ponieważ C nie miało w tym nic złego.Powinieneś zobaczyć coś takiego:
F D
|\|
| C
| |
E B
|/
A
Teraz stosuje się takie same dla D. Aktualizujemy do F, powraca z D addremove i zobowiązać się do G. Teraz wystarczy połączyć, aby zamknąć dodatkową głową. Powinieneś zobaczyć coś takiego:
H
|\
G |
| |
F D
|\|
| C
| |
E B
|/
A
Jeśli chcesz się przekonać siebie, że to działało zawsze można
hg diff -r D -r H
zależności od narzędzia, zobaczysz ani żadnej różnicy albo zmiany nazwy plików wymienione ale bez różnic między nimi.
Sporządzenie listy wszystkich modyfikacji, powrót do wcześniejszych zmian, a następnie ręczne uaktualnienie każdego pliku wydaje się najbardziej ręcznym sposobem wykonania tego. Miałem nadzieję na bardziej zautomatyzowany, niezawodny sposób. –
Mercurial nie wie, jak zmiany muszą się różnić. Nie ma "zastępowania usuniętych i dodanych plików, których nazwy są podobne w przypadku zmiany nazwy tych plików". Git byłby tu lepszy, szukał treści i prawdopodobnie sugerowałby zmianę nazw plików lub czegoś, zamiast kasowania i dodawania plików. – MrFox