如何在与 JGit 合并之前获得冲突?

Posted

技术标签:

【中文标题】如何在与 JGit 合并之前获得冲突?【英文标题】:How to get conflicts before merge with JGit? 【发布时间】:2016-07-22 04:50:05 【问题描述】:

我正在尝试使用 JGit 执行一个项目中有冲突的所有合并场景。

是否有可能在实际合并之前获得冲突?换句话说,是否可以模拟与 JGit 的合并?

我的目标是为项目的所有合并方案访问每个文件的冲突行。

【问题讨论】:

我知道您是 SO 新手。如果您认为某个答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧帖子上。 我了解@RüdigerHerrmann,但感谢您的建议。我只是还没有看到你的答案。我已经尝试过在其他 SO 问题中发现的类似的东西,其中提到了 JGit 测试类。看来,走这条路我可以得到我想要的。我编辑了我的问题,所以我提出了最接近我的目标的问题。 首先在asking questions 之前搜索您不需要的答案,以免浪费他人时间。您的编辑实际上是一个不同的问题。如果您有其他问题,请创建一个新帖子。 其实不要。这是同一件事。从一开始就在那里,我的目标是访问冲突合并的冲突行,而不是知道合并是否会导致冲突。也许头部有点误导,但我认为身体很清楚。如果耽误了您的时间,我很抱歉。还是谢谢! 只是为了澄清我之前的评论:您帖子的第一部分询问如何在实际合并之前获取冲突。 EDIT 之后的部分是关于进行实际的合并 以及为什么它只在第一次执行。对我来说,这完全是另一回事,因此应该是一个单独的问题。 【参考方案1】:

您可以使用ThreeWayMergers 之一来确定是否可以合并两个提交。

默认情况下,JGit 的MergeCommand 使用递归 合并策略。因此,您可能希望使用此合并。

确保创建一个in core合并(将newMerger的第二个参数设置为true)。在这种模式下,合并不会触及工作目录。

ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(repository, true);
boolean canMerge = merger.merge(headCommit, commitToMerge);

如果给定的提交可以合并,merge 方法返回true,否则返回false

可以使用setBase 显式设置基本提交,也可以使用共同祖先。

ResolveMergerRecursiveMerger 还提供了查询哪些文件不能合并的方法。

【讨论】:

可以使用Repositoryresolve方法解析一个ref的commit id,例如repository.resolve( "HEAD" )

以上是关于如何在与 JGit 合并之前获得冲突?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JGit 中合并?

发生冲突时如何强制合并成功?

如何使用 git difftool 来区分合并冲突?

如何解决KDiff在解决合并冲突时增加额外空行的问题?

在 Git 中合并但覆盖更改

Visual Studio Code 如何解决与 git 的合并冲突?