Java Git:每次克隆后,文件名都恢复为旧名称

Java Git:每次克隆后,文件名都恢复为旧名称,java,git,Java,Git,我曾经有一个名为ViewMVC.java的文件,其中包含ViewMVC类的声明 后来,我决定将该类重命名为ViewMvc。因此,文件名更改为ViewMvc.java。我很久以前就把这个变化推到了remote 我面临的问题是,当我克隆远程repo时,文件被拉入ViewMVC.java(类名是ViewMVC)。换句话说,由于某种原因,文件名会恢复为旧名称 我试图再次更改名称并将其推入remote,但问题没有通过这种方式得到解决 你知道为什么会发生这种情况,以及我如何解决这个恼人的问题吗?根据评论中的

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

后来,我决定将该类重命名为
ViewMvc
。因此,文件名更改为
ViewMvc.java
。我很久以前就把这个变化推到了remote

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

我试图再次更改名称并将其推入remote,但问题没有通过这种方式得到解决


你知道为什么会发生这种情况,以及我如何解决这个恼人的问题吗?

根据评论中的讨论,我认为问题在于git实际上认为你在重命名文件时没有做任何更改。您希望它将
ViewMVC.java
视为已删除,并将
ViewMVC.java
视为一个新文件(它有时会将其报告为
ViewMVC.java重命名为ViewMVC.java
),但我猜,由于不区分大小写设置,它只是说“不,没有什么改变。”

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

因此,您必须让它更新树对象(最好是在您关心的每个提示提交中)

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


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

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


这是因为git默认不区分大小写,您可以在设置中更改它,但最简单、最快速的解决方案是将文件重命名为ViewMvc1.java>commit and push>rename to ViewMvc.java>commit and push。

您使用的是什么操作系统?我想知道Windows不区分大小写的文件系统是否在混乱中扮演了角色…@MarkAdelsberger我正在使用混合。我的台式机是Windows,笔记本电脑是OSX,现在我正试图在centOS上启动持续集成服务器。但我倾向于认为更改文件名的原始提交是在Windows上进行的……Windows和OSX默认都使用不区分大小写的匹配,因此
MVC
MVC
是同一个文件。Git有一个配置旋钮,
core.ignoreCase
,告诉它是相信这些是同一个文件还是不同的文件。简单地调整旋钮是不够的,因为Git使用旋钮是为了感觉操作系统将如何处理它,在这里,Git和操作系统都需要区分大小写(就像CentOS一样)。至于最好的修复方法,我避开窗户;我可以在OSX上测试,但没有,所以不知道。当然,我所说的“重新创建”是指类似于
git checkout HEAD^--ViewMVC.java
,重命名文件,然后
git add
等etcGreat解释。我最后只是在centOS机器上更改了名称并推动了更改。