git - 列出 JGit 中的存储应用冲突

标签 git jgit

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

相关文章:

git - 显示你在哪个 git 标签上?

linux - 在smartgit中配置ssh私钥

git - git 远程名称中哪些字符是非法的?

java - JGit 克隆并获取修订散列

java - 列出自使用 JGit 从 master 创建分支以来的所有提交

git - rebase 以更改 merge 提交的父级

git - Jenkins 在发出 pull 请求后禁用分支上的项目构建

jgit - 使用 JGit 显示没有父提交(第一次提交)的更改/差异

android - 使用 JGIT 克隆 list 文件

java - 如何针对 "pull --rebase"冲突重新启动 merge