Git: SVN中的修复移动操作对应的命令是什么?

5
我有时会在Java中修改类名,这意味着我需要修改文件名。
为了保持SVN文件的历史记录,我使用TortoiseSVN工具中的Repair Move。在“检查修改”视图中,选中一个丢失的文件和一个未版本化的文件。右键单击它们中的一个,然后选择Repair Move选项。
这将删除SVN中的旧文件,并添加新文件,同时附加旧文件的历史记录。这样当你执行svn log命令时,你就可以看到从文件名更改之前开始的整个历史记录。
Git有等效的命令吗?根据我的工作流程,似乎应该执行以下操作:
git mv <old filename> <new filename>
# Make the class name changes to reflect the filename change. 
git commit -a -m "Changed filename from Foo.java to Bar.java"

这似乎是一种冗长的做法。

我以为在手动移动文件并对文件本身进行更改后,我将能够使用git mv。但是,git mv似乎只是mv命令的包装器,并添加了对git的更改。

在移动完成后,有没有一种方法可以通知git已移动的文件?


1
可能是让Git认可之前移动的文件的重复问题。 - Thilo
我尝试使用 git mv old new 以相同的方式,希望它只会对索引进行必要的更新。我想知道还有多少人认为这样做是一种直观的解决方案。 - jpierson
1个回答

4
原来 Git 在处理文件重命名时非常聪明。
当你提交一个被删除的文件和一个新文件时,Git 会比较这两个文件的内容是否相似。如果相似度达到一定阈值,提交操作会自动将添加和删除文件改为重命名操作。有时候这个操作会在你使用 git addgit rm 命令后出现,有时候则是在实际提交之后。
例如,Java 文件的文件名或包名发生变化时,文件内容也会有所变化。Git 比较被删除文件和新增文件的内容,发现它们大部分相同,并将其标记为重命名文件。

8
Git 中的自动检测功能非常实用和聪明,但它并不完美。我认为仍然存在需要手动重命名/移动修复功能的情况。 - jpierson
只是想确认一下,如果不依赖于神奇的GIT精灵,明确地mv然后commit是正确的吗?(即将维护文件历史记录) - David Elgstuen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接