在Git中,是否可以将默认冲突标记更改为其他标记?
默认情况下,它们看起来像这样:
<<<<<<< HEAD
[some code]
||||||| merged common ancestors
[some code]
=======
[some code]
>>>>>>> some commit message
例如,我认为在C#文件中使用注释字符开头可能会很好:
// <<<<<<< HEAD
这样,在我解析合并时,冲突标记中的编译错误不会妨碍代码本身的编译错误。
有办法做到这一点吗?
(请不要给出答案,说“你不应该这样做。”我已经知道了这些后果,我对他们很好.Git是为灵活性而设计的。)
答案 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以使用你的驱动程序。