Windows上的Git:重命名文件后无法切换分支(仅更改大小写)

Posted

技术标签:

【中文标题】Windows上的Git:重命名文件后无法切换分支(仅更改大小写)【英文标题】:Git on windows: Can't switch branch after renaming a file (only changed case) 【发布时间】:2013-03-07 08:58:05 【问题描述】:

我在 Windows 上使用 git,我的仓库中有一个文件,可以说“foo.txt”。 今天我想把这个文件重命名为“Foo.txt”(大写)。正如this SO question 中所建议的那样,我使用了git mv -f foo.txt Foo.txt,它产生了预期的结果。我继续提交对我的存储库的更改。编辑:我希望这是一个永久性更改,并且仍然能够签出此更改之前的提交.

但是,之后我在尝试切换分支时遇到了错误:

# I'm on branch1  
git checkout branch2  
Aborting  
error: The following untracked working tree files would be overwritten by checkout:  
Foo.txt  
Please move or remove them before you can switch branches.  

经过一番摸索,我发现我的.git/config 文件具有以下设置:

[core]  
    ignorecase=false  

将此更改为 true 似乎可以解决问题,并允许我像往常一样在分支之间进行更改。

所以关于这个,我想知道:

    此设置是否有任何不利影响?它应该在 Windows 上总是正确的吗?如果我正在与其他开发人员一起工作并且他们没有为此设置相同的值怎么办? 是否有其他方法可以重命名文件而无需更改此设置? 首先为什么会发生这种情况?当我提交更改时,git 正确地识别出该文件实际上已重命名(没有删除一个文件然后添加另一个文件)。那么当我尝试切换分支时究竟发生了什么?

谢谢!

【问题讨论】:

【参考方案1】:

无需更改配置设置即可解决此问题的一种简单(但不优雅)的方法是删除文件并再次检出。在我的情况下,这允许我的更改分支再次正常。

编辑:正如 Avivr 指出的那样,我提出的解决方法并不能永久地解决问题。我仍然不会删除此答案,因为在某些情况下它可能会作为临时 hot-fix 有所帮助。

【讨论】:

这意味着每次我想更改分支时我都会删除文件,从现在到永远。正确的?这似乎有点不方便...... 你真的试过了吗?就我而言,它有效,但我不会声称我可以完全重现您的情况 是的,我做到了,至少假设我理解正确。我用 git 重命名了文件,然后提交了更改。然后我删除了该文件(仅使用rm)并使用git checkout . 恢复它。之后,更改分支时出现同样的错误。【参考方案2】:

如“Unresolvable Git error: The following untracked working tree files would be overwritten by checkout”中所述,将core.ignorecase 设置为true 是允许结帐继续进行的有效方式。

但我更愿意,如“GIT: The following untracked working tree files would be overwritten by checkout”,以:

git add 我刚刚修改的内容(在您的情况下,git mv 可能已经将重命名的文件添加到索引中) git stash,保存索引 git checkout -b anotherBranch:这应该可以工作,因为索引是干净的 git stash pop,如果您想在该新索引上恢复大小写更改。

【讨论】:

好的,但我想提交重命名。问题是,如果我这样做了,那之后我就不能切换分支了。 @avivr 你不能在提交后切换,即使core.ignore 设置为false? 不,就像我说的,我只能切换分支,如果它设置为真。此外,在我按照您的建议存储重命名之后,尝试弹出存储时我遇到了同样的错误。所以藏匿处是“不可弹出的”,我不得不放弃它。 @avivr 抱歉,我的意思是设置为 true,确实。

以上是关于Windows上的Git:重命名文件后无法切换分支(仅更改大小写)的主要内容,如果未能解决你的问题,请参考以下文章

git 本地重命名文件夹大小写并提交到远程分支

Git:重命名分支中的目录

git:使用分支

git分支重命名

git

git push重命名分支