在 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
我正在使用 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