为什么git在两个明显相同的添加文件之间显示冲突?

时间:2012-03-30 21:10:56

标签: git git-rebase merge-conflict-resolution git-cherry-pick

我有一个在TFS中启动的项目,然后转移到Git。不幸的是,将它移动到Git的人只是检查当前文件而不是使用git-tfs。我试图在我使用git-tfs从TFS提交的提交中重新设置他在Git中的新提交。

要做到这一点,我只是在git-tfs提交之上重新提交他的提交。 (我意识到这会弄乱远程Git分支,但我们是一个小团队,它会没事。我也尝试过采摘樱桃,但我遇到了同样的问题。)

我遇到的问题是一组看起来像这样的冲突:

<<<<<<< HEAD
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
||||||| merged common ancestors
=======
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
>>>>>>> Add a bunch of stuff.

看来这是添加这些文件的TFS端提交和添加它们的Git端提交之间的冲突(因为Git repo开始为空)。

逻辑上可能是跳过这个提交,但也有一些文件(比如几百个中的十个)是新的。当然,那些不会引起冲突。

为什么Git不能自己弄清楚两个文件是否相同?即使我在改装时使用--ignore-whitespace,Git仍会显示几十个这样看似相同的文件。我对如何解决这个问题感到茫然。

4 个答案:

答案 0 :(得分:9)

应该是关于行结尾的差异,如ebneter评论 很久以前我已经详细介绍了git merge如何不擅长忽略这些差异(而不是空格差异):
Is it possible for git-merge to ignore line-ending differences?

这就是为什么异构环境中的存储库需要一致的 eol转换策略。
请参阅“Distributing git configuration with the code”。

答案 1 :(得分:5)

我正在做类似的事情,只是发现了“-X ignore-space-at-eol”。它可用于merge和rebase。似乎正在做正确的事,但对我来说死亡很慢。

答案 2 :(得分:1)

我刚刚碰到这个问题,接着是这篇文章,只是为了意识到这对我来说也是一个行结束的场景。

所以FWIW,这种情况发生在我的情况下,因为我曾经有过“使用Windows样式行结尾”,但在某些时候,对于不同的项目,我将其重新配置为“使用Unix样式行结尾”(这些配置可用)来自Git安装程序)。

返回“使用Windows样式行结尾”解决问题而不使用“--ignore-whitespace”

答案 3 :(得分:1)

如果您可以排除因行结尾不同而导致的不可见更改,您可能需要检查文件是否具有不同的模式(例如,如果设置了可执行位)。当文件模式改变时,Git在diff中显示完整文件。