是否可以轻松更改Git中的默认冲突标记?

时间:2011-07-28 21:37:58

标签: git

在Git中,是否可以将默认冲突标记更改为其他标记?

默认情况下,它们看起来像这样:

<<<<<<< HEAD

    [some code]

||||||| merged common ancestors

    [some code]

=======

    [some code]

>>>>>>> some commit message

例如,我认为在C#文件中使用注释字符开头可能会很好:

// <<<<<<< HEAD

这样,在我解析合并时,冲突标记中的编译错误不会妨碍代码本身的编译错误。

有办法做到这一点吗?

(请不要给出答案,说“你不应该这样做。”我已经知道了这些后果,我对他们很好.Git是为灵活性而设计的。)

4 个答案:

答案 0 :(得分:1)

如果我必须这样做(以谨慎行事),我会怎样做:

在你的项目中添加一个预编译步骤(从你的配置文件我假设你正在使用C#)来运行sed(假设你安装了git,并且bash命令可用于所有内容)。在找到冲突标记的地方插入'//'标记。

为什么这是一个坏主意:

我不推荐这个,因为效果不会给你带来任何好处。当存在未解决的冲突被保存,添加和提交时,您希望失败。做你在这里提出的建议是惹麻烦。如果您成功,请谨慎行事。

希望这有帮助。

答案 1 :(得分:1)

如果你重新编译自己的Git代码怎么办?源代码位于:http://git.kernel.org/?p=git/git.git;a=summary(通过http://git-scm.com/)。

答案 2 :(得分:0)

没有现成的方法可以做到这一点。 Git确实是为灵活性而设计的,但在这种情况下,它通过允许人们提供自己的自定义合并驱动程序来提供灵活性。这不是一项微不足道的工作。另一个选择是破解源代码,这不会那么容易。

我对最简单方法的建议是编写一个后处理程序,您可以在合并后单独在源文件上运行。你可以将它放在一个单行的sed脚本中。

如果您决定采用这条路线以便在合并解决期间进行编译,我建议您不要只注释冲突标记,而是注释掉除本地版本更改之外的所有冲突代码。这样你就有更好的机会生成可编辑的东西。并且可能添加#warning pragma或类似内容以提醒您,以防您不小心留下。

答案 3 :(得分:0)

由个人合并驱动程序决定。来自man gitattributes(5)

  

可以定义一些内置的低级合并驱动程序   通过merge属性询问。

     

文本

     

文本文件的常用3向文件级合并。冲突地区   标有冲突标记&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&nbsp;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;。该   您的分支中的版本出现在=======标记之前,并且   合并分支的版本出现在=======标记之后。

[...]

  

定义自定义合并驱动程序

     

合并驱动程序的定义是在.git / config文件中完成的,而不是   在gitattributes文件中,所以严格来说这个手册页是一个   说错的地方。然而...

     

要定义自定义合并驱动程序filfre,请在您的部分添加一个部分   $ GIT_DIR / config文件(或$ HOME / .gitconfig文件),如下所示:

[merge "filfre"]
         name = feel-free merge driver
         driver = filfre %O %A %B
         recursive = binary

即:“text”合并驱动程序执行您不喜欢的操作,并且无法配置要使用的符号(尽管您可以将其配置为使用更多数量的标记)。但是你可以复制粘贴驱动程序,重命名它,用你的符号替换符号,然后配置git以使用你的驱动程序。