Git: file name reverted to legacy name after each clone
我以前有一个名为ViewMVC.java的文件,其中包含ViewMVC类的声明。
后来,我决定将类重命名为ViewMVC。结果,文件名改为ViewMVC.java。很久以前我把这个零钱推到了遥控器上。
我面临的问题是,当我克隆远程repo时,文件被作为ViewMVC.java拉出来(类名如预期是ViewMVC)。换句话说,由于某种原因,文件名会恢复为旧名称。
我再次尝试更改名称并将其推入远程,但问题并没有通过这种方式解决。
你知道为什么会发生这种情况吗?我怎么解决这个烦人的问题?
- 你在使用什么操作系统?我想知道Windows不区分大小写的文件系统是否在混乱中扮演了一个角色…
- @我在用混合物。我的桌面是Windows,笔记本是OSX,现在我正尝试在CentOS上安装持续集成服务器。但我倾向于相信更改文件名的原始提交是在Windows上完成的…
- 默认情况下,Windows和OSX都使用不区分大小写的匹配,因此MVC和MVC是相同的文件。Git有一个配置旋钮,core.ignoreCase,告诉它这些是相同的文件还是不同的文件。仅仅调整旋钮是不够的,因为Git使用旋钮是为了感觉操作系统将如何处理它,你需要Git和操作系统都是区分大小写的(就像CentOS一样)。至于修复它的最佳方法,我避免使用Windows;我可以在OSX上进行测试,但没有,所以不知道。
- stackoverflow.com/questions/10523849/…stackoverflow.com/questions/6899582/…stackoverflow.com/questions/26014660/…stackoverflow.com/questions/17683458/…
根据评论中的讨论,我认为问题是Git实际上认为在重命名文件时没有更改任何内容。你想让它把ViewMVC.java视为已删除,把ViewMVC.java视为一个新文件(它有时会报告为ViewMVC.java renamed to ViewMvc.java),但我猜是因为情况不敏感设置,它只是说"不,没什么改变。"
那么,问题是树对象——本质上是一个像目录列表一样读取的文本文件——仍然有旧的大写字母。同样,由于大小写不敏感设置,如果工作树中存在这样的大小写,它将很高兴地使用不同的大小写来处理文件;但是在克隆时,它默认为树对象中的大小写。
因此,您必须让它更新树对象(理想情况下,在每个技巧中提交您关心的内容)。
在具有区分大小写的fs(和相应的git config设置)的系统上,您可以简单地克隆repo、移动文件(再次)、git add .、使用git status确认它看到重命名,然后提交。
要在Windows系统上修复它,我唯一能尝试的就是删除文件,提交,然后用正确大写的文件名重新创建文件,然后再次提交。
- 当然,"重新创建"是指像git checkout HEAD^ -- ViewMVC.java,重命名文件,然后是git add等
- 很好的解释。我最后只是在CentOS机器上更改了名称,并推动了更改。
每当有人用不同的大小写重命名相同名称的文件时,我们的项目就会不时出现这种情况。
这是因为Git默认情况下不区分大小写,您可以在设置中更改它,但最简单和最快速的解决方案是将文件重命名为viewmvc1.java>提交并再次推送>重命名为viewmvc.java>提交并推送。