在 JGit 中列出 stash apply 冲突

List stash apply conflicts in JGit

我正在使用 StashApplyCommand class 将隐藏的提交应用到工作树。如果发生冲突,此 class 的 call() 方法将抛出 StashApplyFailureException.

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

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

我遇到了同样的问题,但找不到让 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