Может ли mercurial отслеживать переименование после того, как я использовал Eclipse для рефакторинга класса

Я только что использовал eclipse для рефакторинга имени класса, отслеживаемого в mercurial. Мой плагин mercurial eclipse правильно отслеживал мое переименование или я могу что-то сделать, чтобы помочь отследить его? Как узнать, отследил ли он?

Кажется, теперь я не могу использовать команду hg rename a b после того, как eclipse выполнил рефакторинг.

Eclipse on Ubuntu 18.04
Version: 2022-03 (4.23.0)
hg --version
Mercurial Distributed SCM (version 4.5.3)

Я предполагаю, что git не нужно иметь дело с этим из-за обнаружения переименования.


2
27
2

Ответы:

Одна из возможностей — использовать добавитьудалить с опцией --similarity.

hg addremove --similarity 80

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


Решено

Я не уверен, что сделал Eclipse, но вы можете точно проверить, правильно ли было записано переименование, а если нет, то вручную записать его постфактум.

Я предполагаю, что вы еще не внесли изменения.

Один из способов проверить: в командной строке запустить hg diff -g path/to/new/file. Если переименование было записано, это должно быть очевидно из различий; либо вы не увидите никаких изменений в файле или хотя бы узнаваемых. Но если это не было записано как переименование, то diff будет думать, что весь файл полностью новый.

Далее, если переименование файла не было записано, можно сделать:

hg mv -A path/to/original/filename path/to/renamed/filename

и тогда он будет рассматривать файл как переименованный (например, перемещенный). Запустите diff еще раз, чтобы подтвердить эффект.


Очень похожий случай, если вы реорганизуете файл, разбивая его на части. В этом случае вы можете использовать hg cp -A ... (вместо hg mv), чтобы записать все производные части исходного файла как его «копии». Преимущество этого заключается в том, что любые последующие слияния, влияющие на исходный файл, будут распространяться и на все его производные, что является одним из основных преимуществ отслеживания истории файла по копиям/переименованиям.