【发布时间】:2011-10-13 07:17:43
【问题描述】:
使用适用于 Java 的 IDE 的一大好处是您可以获得自动重构。我遇到的问题是,在使用 Refactor > Move 将类移动到不同的包中(将文件本身移动到文件系统中)之后,git status 显示文件在旧位置已删除,新位置的已添加。
我发现的解决方法很笨拙:
mv src/com/example/newpackage/Foo.java src/com/example/oldpackage/Foo.java
git mv src/com/example/oldpackage/Foo.java src/com/example/newpackage/Foo.java
有什么方法(当使用 Eclipse 的 Git 插件时)让重构执行 git mv 而不是简单的文件系统移动?
【问题讨论】:
-
搬家后的实际状态是什么?是否都进行了更改(添加和删除)?如果是这样,请尝试
git diff --cached -M。我发现有时你必须告诉 git 检测重命名,特别是因为它是在之后检测到的。 -
git 告诉我旧文件已被删除,而新文件未跟踪(因此未暂存)。我尝试了
git diff --cached -M,并将新位置视为新文件。我应该寻找什么? -
这就是你没有看到变化的原因。 Git 不会对新文件做任何事情,直到它在索引中(它通过暂存移动到那里)。如果您暂存新文件,
git status和git diff --cached -M都会将更改报告为重命名。如果差异变化太多,添加--name-status,它只会显示相似度指数(格式为RXX,其中XX是相似度百分比)。 -
实际上,暂存两个文件仍然不会报告重命名;它报告一个删除和一个新文件。
-
来自*.com/questions/2641146/… 看起来 git 默认情况下可能不会对 git status 进行重命名检测(这可能是一项昂贵的操作)。试试他们推荐的
git commit --dryrun命令。git diff cached -M是否报告了重命名?如果是这样,相似度指数高吗?我只用了一个文件移动和非常少量的更改进行了测试,重构可能有更多的更改可能会减少太多。