更改案例时,git merge失败并显示“Untracked working tree file”

时间:2011-07-18 22:57:46

标签: git macos case-insensitive branching-and-merging

在Mac OS X上,我有两个分支 - 比如A和B - 我想将A合并到B.当我尝试在B上做git merge A时,我得到:

error: Untracked working tree file 'path/file.php' would be overwritten by merge.  Aborting

这是因为A中的某些更改重命名了文件 - 即B有文件path/File.php而A已将其重命名为path/file.php。由于Mac OS X文件系统不区分大小写,因此可能会混淆git。有没有办法让git正确合并?

更新:为了澄清,分支B没有任何未提交的更改,并且在两个分支中跟踪有问题的文件(当然,在不同的名称下)。

4 个答案:

答案 0 :(得分:4)

好的,经过一整天的挖掘,这是我找到的解决方案:

==========情况==========

我正在开发我的分支“Hotdog”

我的同事将他的工作推到了我们的主分支,包括一个名为“Hamburgersrule”的文件

我将master合并到我的Hotdog分支中。

我的同事将“Hamburgersrule”更改为“HamburgersRule”,并将其推向掌握。

==========问题==========

当我尝试在Hotdog和Master之间切换时,Git认为发生了一些变化。 HamburgersRule的情况与Git看起来不同,但是Windows认为它很好。每当我尝试合并或结帐另一个分支时,Git警告我,我将丢失未分级的文件。

我可以通过将git config core.ignorecase设置为true来抑制该消息,但是潜在的问题仍然存在,忽略大小写差异就是让我们首先陷入困境的原因。

==========解决方案==========

1:对Master进行三重重命名(以确保新文件名正确) 汉堡规则 - > HamburgersRule_Rename - > HamburgersRule

2:将更改合并到Hotdog Branch。要使合并工作,您需要删除您的“Hamburgersrule”版本(使用您的操作系统,而不是git)

3:清除Hotdog上的剩余文件。检查合并是否按预期工作。您可能需要从Master分支机构查看HamburgersRule:

git checkout master HamburgersRule

编辑: 重要的提示。如果您不想一遍又一遍地修复此问题,请确保您的同事都将ignorecase设置为false

git config core.ignorecase false

如果有人忽略区分大小写,他们的git客户端将忽略这些更改,并继续检查错误名称。

答案 1 :(得分:3)

启动git 2。0。1(2014年6月25日),该合并将不再失败。

commit ae352c7f37ef2098e03ee86bc7fd75b210b17683

David Turner (dturner-tw)

merge-recursive.c:修复案例更改合并错误

  

在不区分大小写的文件系统上,合并时,如果传入的提交已重命名,只会更改其大小写,则会从工作树中错误地删除该文件。
  合并重命名时,将删除具有旧名称的文件 - 但由于文件系统认为旧名称与新名称相同,因此新文件实际上将被删除。

     

我们通过不删除在阶段0的索引中具有案例克隆的文件来避免这种情况。

答案 2 :(得分:2)

也许对另一个问题的这个答案会有所帮助;您可能只想暂时启用该选项...

git mv and only change case of directory

答案 3 :(得分:0)

如果您在git mv path/File.php path/file.phpB怎么办?这应该让git知道它是具有不同名称的同一文件。