Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止git冲突标记_Git_Git Merge_Merge Conflict Resolution_Beyondcompare_Git Merge Conflict - Fatal编程技术网

防止git冲突标记

防止git冲突标记,git,git-merge,merge-conflict-resolution,beyondcompare,git-merge-conflict,Git,Git Merge,Merge Conflict Resolution,Beyondcompare,Git Merge Conflict,我仔细地看了看,找到了答案,但也没能找到。有没有一种简单的方法可以防止git在合并时将冲突标记附加到冲突文件中。我想阻止git添加“如果文件冲突,目标是 1) 让git将文件标记为“冲突”,并且 2) 能够在文件的未合并版本(“我们的”版本和“他们的”版本)之间使用超越比较的功能 我要提醒的是,虽然这在简单的情况下可以很好地工作,但它确实在一定程度上击败了通常使用的三方合并方法(即,您没有在合并基础的上下文中查看更改),因此在一些更复杂的情况下,这将不是那么容易。(因此,我建议您熟悉一个更“标准

我仔细地看了看,找到了答案,但也没能找到。有没有一种简单的方法可以防止git在合并时将冲突标记附加到冲突文件中。我想阻止git添加“如果文件冲突,目标是

1) 让git将文件标记为“冲突”,并且

2) 能够在文件的未合并版本(“我们的”版本和“他们的”版本)之间使用超越比较的功能

我要提醒的是,虽然这在简单的情况下可以很好地工作,但它确实在一定程度上击败了通常使用的三方合并方法(即,您没有在合并基础的上下文中查看更改),因此在一些更复杂的情况下,这将不是那么容易。(因此,我建议您熟悉一个更“标准”)“解决冲突的方法,这样你至少可以在必要时依靠它。)

但肯定有几种方法可以做到这一点。最简单的事情是正常启动合并

git checkout our_branch
git merge their_branch
然后,当它发生冲突时,将工作树还原为“我们的”版本

如果您已将Beyond Compare配置为作为您的diff工具使用,那么您可能可以跳过签出,只需

git diff our_branch their_branch -- path/to/conflicted/file
但这里的缺点是BC不会打开您的工作版本的文件,因此您可能无法获得直接编辑该文件所需的支持

因此,另一个设置更复杂但使用更自动化的选项是设置自定义合并驱动程序。每当给定文件的“我们的”版本和“他们的”版本(相对于“基本”版本)发生更改时,自定义合并驱动程序就会启动。它是一个脚本,作为参数接收表示文件不同版本的临时文件的名称。它在“我们的”版本的路径上创建(暂定)合并结果,并返回指示是否发生冲突的状态

合并驱动程序在
Merge
属性(at)的文档中进行了描述。这还表明,给定一个已配置的合并驱动程序,您可以将其与给定路径下的文件和
.gittributes
文件相关联。(您可以将其与repo中的所有路径与
*
的条目相关联,但如果repo可能包含二进制文件,您可能希望避免这样做,或者注意驱动程序脚本对二进制文件的行为是否合理。)

脚本本身将尝试正常合并

git merge-file -p <ours> <base> <theirs> > <temp-path>
(您仍然希望首先在不使用
--ours
选项的情况下运行,以便知道是否发生了任何冲突。如果存在冲突,则删除临时文件,使用
--ours
选项重新运行-但不使用
-p
或输出重定向-并且再次返回非零值,以便git知道存在冲突。)


最后,请注意,这不应与仅使用
-s ours
(完全忽略其他分支内容)或
-X ours
(以“我们的”版本解决冲突且不报告冲突)运行merge时发生的情况相混淆.

考虑到您的评论,您应该将Beyond Compare设置为
mergetool
,而不是手动打开有冲突的文件。请确保您可以首先在终端中运行
bc3
。然后您可以这样设置(在Linux上):

现在,当你遇到冲突时,只要跑就行了

git mergetool
在Beyond Compare中打开冲突的文件


请在其支持站点上查找其他操作系统的更多详细信息和说明:。

欢迎访问。这些操作系统导致的问题是什么,使您希望摆脱它们?我不知道如何做到这一点,也无法想象您为什么要这样做,因为这可能会使您无法解决合并冲突。avo的一个选项id他们将使用
--我们的
--他们的
标志进行合并。然后,Git将明确地接受每个文件的一个版本,并且不会有冲突。听起来像是在与症状作斗争。你明白Git为什么会产生冲突标记吗?你为什么要阻止Git这样做?Git应该怎么做我的问题是:当发生冲突时,你希望git做什么?如果没有冲突标记,你怎么知道冲突是关于什么的?嗨,谢谢你的回答。我想阻止git添加标记的原因是因为我使用beyond compare手动解决我的冲突,而那些git标记往往搞乱beyond compare如何看待文件之间的差异。
git merge-file --ours <ours> <base> <theirs>
git config --global merge.tool bc3
git config --global mergetool.bc3.trustExitCode true
git mergetool