Git merge:为什么在linux和windows上修改源代码后会出现很多合并冲突?

时间:2010-06-28 14:20:33

标签: git merge conflict

我周末在家做了一些工作,并使用git将代码更改合并到我的办公室计算机(通过vpn连接),发现了一些非常难看的合并问题。

首先,合并应该非常干净,因为星期五在办公室里已经完成了所有工作,我只在周六和周日对我的家用电脑进行了更改。但是,当我将更改提取到我的办公室计算机时,我最终遇到了大量的合并冲突。

我清理了合并冲突,但后来我发现许多文件(从我可以告诉我周末更改的任何文件)在整个文件中都有<<<<<<< HEAD" and ">>>>>>> D1/master。例如:

diff --git a/web/Web.Controller/Helpers/FormsAuthentication.cs b/web/Web.Controller/Helpers/FormsAuthentication.cs
index 8571f53..4a9c9fc 100644
-- a/web/Web.Controller/Helpers/FormsAuthentication.cs
++ b/web/Web.Controller/Helpers/FormsAuthentication.cs
@@ -10,7 +10,10 @@
    /// </summary>
    public class FormsAuthenticationUtility : IAuthenticationUtility
    {
<<<<<<< HEAD

=======
>>>>>>> D1/master
        #region IAuthentication Members

        /// <summary>

我能够使用kdiff通过与从我的家用计算机复制的源代码进行比较来修复代码,但这似乎完全搞砸了。

任何想法发生了什么?

3 个答案:

答案 0 :(得分:4)

当Windows文件合并到我的Linux仓库时,我遇到了同样的问题,因此这是一个CRLF问题。我最终可以在this answer的帮助下解决这个问题。 IIRC必须在合并之前完成,但它已经有一段时间了,老实说我忘了把它写下来......

答案 1 :(得分:1)

由于他们对换行符的不同处理,我从Windows转到* Nix并返回时出现了这样的问题。 Git可能正在接受这些差异,无论出于何种原因未能合并。

也许试试--ignore-space-at-eol

修改

合并时,实际 的空白区域很重要。在您的确切情况下可能无关紧要,但有些情况可能会产生影响。 This question似乎要解决应该采取哪些措施来比以往更好地解决冲突。

答案 2 :(得分:1)

这听起来像合并时的CRLF问题:它引发了最近的讨论here。您可能还想尝试使用一些文件构建简化案例,以找出导致此问题的确切原因。