Восстановление ссылок между перемещенными файлами в Mercurial - PullRequest
1 голос
/ 12 декабря 2010

В течение этого репо (изначально SVN) я не очень хорошо держал ссылки на файлы вместе.Я дважды изменил IDE, разделил проект на модули Netbeans и со временем разработал проект.Большая часть истории файлов теряется, главным образом потому, что во время mavenizing я удалил весь ствол, зафиксировал, скопировал поверх проекта maven и зафиксировал.Не совсем лучшая идея, как я позже выяснил, вся история сбрасывается к этому моменту.Она стала настолько плохой, что программа статистики репозитория бесполезна, поскольку в ней говорится, что я вложил 50 000 строк кода вместо ~ 8 000.

Есть ли способ исправить всю историю поврежденных файлов?У меня есть доступ к SVN и Git, если Mercurial не может это сделать

1 Ответ

3 голосов
/ 12 декабря 2010

Хм, и когда вы сделали удаление и копирование, все было бы хорошо, если бы вы только что сделали hg addremove --similarity 90, который говорит: «Удалите все, что ушли, добавьте все, что ново, и если они на 90% похожи на одно другое считается как переименование ".

Теперь, когда эта возможность упущена, нет возможности переместить одну без переписывания вашего репозитория, что делает недействительными все клоны в дикой природе, поскольку все идентификаторы узлов (хэши) меняются. Если это нормально и у вас в значительной степени линейная история, вы, вероятно, можете обойтись чем-то вроде этого:

hg export --output "../patch-%n.patch" 0:tip  # exports every changeset to a patch file
cd ..
hg init newrepo
cd newrepo
hg import --similarity 90 ../patch*

Это берет линейную историю от вашего первого коммита до вашего последнего (исключая ветви и другие главы и т. Д.), Экспортирует их в патчи, создает новое пустое репо и импортирует наборы изменений, используя функцию обнаружения переименования.

Это довольно радикальный поступок, поэтому убедитесь, что он действительно того стоит, и держите свой старый репо в порядке.

...