列表存储在JGit中应用冲突

时间:2016-09-14 13:50:38

标签: git jgit

我正在使用StashApplyCommand类将stashed提交应用于工作树。如果发生冲突,此类的call()方法将抛出StashApplyFailureException

但是,我找不到一种方法来检索冲突列表。与MergeCommand不同,StashApplyCommand不会将此列表作为call()方法的返回值的一部分返回。

是否可以在JGit中检索由存储应用引起的冲突?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,无法让StashApplyCommand告诉我哪些文件会导致冲突。

我目前使用的解决方法是使用ResolveMerger来查看是否可以应用存储。如果存在冲突文件,则合并可以列出它们。

例如:

ObjectId headCommitId = // id of head commit
RevCommit stashCommit = // parsed stash (commit) to be applied
ObjectId stashHeadCommit = stashCommit.getParent( 0 );
ResolveMerger merger = ( ResolveMerger )MergeStrategy.RESOLVE.newMerger( repository, true );
merger.setWorkingTreeIterator( new FileTreeIterator( repository ) );
merger.setBase( stashHeadCommit );
if( !merger.merge( headCommitId, stashCommit ) ) {
  // look into merger.getFailingPaths() and merger.getUnmergedPaths()
}

请注意,上面的代码段不会检测索引冲突,因为在我的环境中,索引永远不会导致冲突。虽然应该可以扩展这种方法来检查冲突索引。 IIRC stashCommit.getParent( 1 )指向隐藏的索引。

希望有一天变通办法变得过时了,我已经提交了一份增强请求: https://bugs.eclipse.org/bugs/show_bug.cgi?id=501475