14

我在 Windows 上使用 git,我的仓库中有一个文件,可以说“foo.txt”。今天我想把这个文件重命名为“Foo.txt”(大写)。正如这个 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 回答 2

4

如“ Unresolvable Git error: The following untracked working tree files will be overwritten by checkout ”中所述,设置core.ignorecasetrue是​​允许签出继续进行的有效方式。

但我更愿意,如“ GIT:以下未跟踪的工作树文件将被 checkout 覆盖”,以:

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

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

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

于 2013-03-18T21:02:14.723 回答