我正在使用 StashApplyCommand
类将 stash 的提交应用到工作树。如果发生冲突,此类的 call()
方法会抛出 StashApplyFailureException
。
但是,我找不到检索冲突列表的方法。与 MergeCommand
不同,StashApplyCommand
不会将此列表作为 call()
方法的返回值的一部分返回。
是否有可能检索由 JGit 中的存储应用引起的冲突?
最佳答案
我遇到了同样的问题,但找不到让 StashApplyCommand
告诉我哪些文件导致冲突的方法。
我当前使用的解决方法是使用 ResolveMerger
来查看是否可以应用存储。如果存在冲突文件, merge 器可以将它们列出。
例如:
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 )
指向 stash 索引。
希望该解决方法有一天会过时,我已提交了一份增强请求: https://bugs.eclipse.org/bugs/show_bug.cgi?id=501475
关于git - 列出 JGit 中的存储应用冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492225/