在我使用 Eclipse 重构 class 之后,mercurial 可以跟踪重命名吗

Can mercurial track a rename after I've used Eclipse to refactor a class

我刚刚使用 eclipse 重构了一个在 mercurial 中跟踪的 class 名称。我的 mercurial eclipse 插件是否正确跟踪了我的重命名,或者我可以做些什么来帮助跟踪它?我如何判断它是否跟踪?

在 eclipse 执行重构后,我现在似乎无法使用 hg rename a b 命令。

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

我猜 git 不需要处理这个因为它是重命名检测。

一种可能性是使用 addremove--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)将原始文件的所有衍生片段记录为它的“副本”。这样做的好处是,影响原始文件的任何后续合并也将传播到其所有派生文件,这是跨 copies/renames.

跟踪文件历史记录的主要好处之一。