关于java:Git:每个克隆后文件名恢复为旧名称

Git: file name reverted to legacy name after each clone

本问题已经有最佳答案,请猛点这里访问。

我以前有一个名为ViewMVC.java的文件,其中包含ViewMVC类的声明。

后来,我决定将类重命名为ViewMVC。结果,文件名改为ViewMVC.java。很久以前我把这个零钱推到了遥控器上。

我面临的问题是,当我克隆远程repo时,文件被作为ViewMVC.java拉出来(类名如预期是ViewMVC)。换句话说,由于某种原因,文件名会恢复为旧名称。

我再次尝试更改名称并将其推入远程,但问题并没有通过这种方式解决。

你知道为什么会发生这种情况吗?我怎么解决这个烦人的问题?


根据评论中的讨论,我认为问题是Git实际上认为在重命名文件时没有更改任何内容。你想让它把ViewMVC.java视为已删除,把ViewMVC.java视为一个新文件(它有时会报告为ViewMVC.java renamed to ViewMvc.java),但我猜是因为情况不敏感设置,它只是说"不,没什么改变。"

那么,问题是树对象——本质上是一个像目录列表一样读取的文本文件——仍然有旧的大写字母。同样,由于大小写不敏感设置,如果工作树中存在这样的大小写,它将很高兴地使用不同的大小写来处理文件;但是在克隆时,它默认为树对象中的大小写。

因此,您必须让它更新树对象(理想情况下,在每个技巧中提交您关心的内容)。

在具有区分大小写的fs(和相应的git config设置)的系统上,您可以简单地克隆repo、移动文件(再次)、git add .、使用git status确认它看到重命名,然后提交。

要在Windows系统上修复它,我唯一能尝试的就是删除文件,提交,然后用正确大写的文件名重新创建文件,然后再次提交。


每当有人用不同的大小写重命名相同名称的文件时,我们的项目就会不时出现这种情况。

这是因为Git默认情况下不区分大小写,您可以在设置中更改它,但最简单和最快速的解决方案是将文件重命名为viewmvc1.java>提交并再次推送>重命名为viewmvc.java>提交并推送。