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

时间:2013-03-18 20:52:36

标签: git rename case-sensitive file-rename ignore-case

我在windows上使用git,我的repo中有一个文件,让我们说“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似乎可以解决问题并允许我在正常分支之间进行更改。

关于这一点,我想知道:

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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,如果您想恢复该新索引的大小写更改。