如何在与 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】:您可以使用ThreeWayMerger
s 之一来确定是否可以合并两个提交。
默认情况下,JGit 的MergeCommand
使用递归 合并策略。因此,您可能希望使用此合并。
确保创建一个in core合并(将newMerger
的第二个参数设置为true
)。在这种模式下,合并不会触及工作目录。
ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(repository, true);
boolean canMerge = merger.merge(headCommit, commitToMerge);
如果给定的提交可以合并,merge 方法返回true
,否则返回false
。
可以使用setBase
显式设置基本提交,也可以使用共同祖先。
ResolveMerger
和 RecursiveMerger
还提供了查询哪些文件不能合并的方法。
【讨论】:
可以使用Repository
的resolve
方法解析一个ref的commit id,例如repository.resolve( "HEAD" )
。以上是关于如何在与 JGit 合并之前获得冲突?的主要内容,如果未能解决你的问题,请参考以下文章