首页 > 解决方案 > JGIT重复合并冲突空指针异常

问题描述

我想问一下下面的代码行为什么我得到空指针异常。这是我不明白的与 Git 相关的东西吗?

refsideMerge=existingRepo.exactRef("refs/heads/sideMerge");
tmpMerge = git.merge();
tmpMerge.include(refsideMerge);
tmpMerge.setCommit(false);//dry run to get conflicting files
tmpMergeRes = tmpMerge.call();

Map allConflicts = tmpMergeRes.getConflicts();          
 for (Map.Entry<String,int[][]> entry : tmpMergeRes.getConflicts().entrySet()) {
 System.out.println("Key: " + entry.getKey());
  for(int[] arr : entry.getValue()) {
   System.out.println("value: " + Arrays.toString(arr));
  }
}

描述:

反复运行此代码片段后,我遇到了 Nullpointer 异常。我想测试我的 xml Parsing for Merge Conflicts,这就是为什么我需要重复的 Merge Conflicts 来处理。目前只有 Merge 部分用于产生冲突。

据我所知,它停在下一行

Map allConflicts = tmpMergeRes.getConflicts();

标签: javagitnullpointerexceptionjgit

解决方案


所以我为此找到了解释:

基本上,每当您运行 git merge 时,它​​都会触及工作目录,即使它的空运行是写在那里的。

有两种可能的解决方案: FirstSecond

现在我将在空运行后重置头部。这是一个简单的解决方案,使用 ResolveMerger 的另一个解决方案会更好,但仍在研究如何做到这一点。

refsideMerge=existingRepo.exactRef("refs/heads/sideMerge");
tmpMerge = git.merge();
tmpMerge.include(refsideMerge);
tmpMerge.setCommit(false);//dry run to get conflicting files
tmpMergeRes = tmpMerge.call();

Map allConflicts = tmpMergeRes.getConflicts();          
 for (Map.Entry<String,int[][]> entry : tmpMergeRes.getConflicts().entrySet()) {
 System.out.println("Key: " + entry.getKey());
  for(int[] arr : entry.getValue()) {
   System.out.println("value: " + Arrays.toString(arr));
  }
}
git.reset().setMode(ResetType.HARD).call();

推荐阅读