使用JGit从合并场景中获取冲突线的最佳方法是什么?

时间:2016-04-06 19:13:24

标签: java git-merge jgit merge-conflict-resolution

我正在使用JGit执行项目的所有合并方案(如下所示),但它们仅在第一次执行时执行。在第二次执行中,getMergeScenarios()返回一个空列表。

List<RevCommit> list = getMergeCommits();   

for (RevCommit mergeCommit : list) {
    RevCommit leftParent = mergeCommit.getParent(0);
    RevCommit rightParent = mergeCommit.getParent(1);

    CheckoutCommand ckoutCmd = git.checkout();
    ckoutCmd.setName(leftParent.getName());
    ckoutCmd.setStartPoint(leftParent);
    ckoutCmd.call();

    MergeCommand mergeCmd = git.merge();
    mergeCmd.setCommit(false);
    mergeCmd.include(rightParent);
    MergeResult mResult = mergeCmd.call();

    if(mResult.getMergeStatus()==MergeStatus.CONFLICTING){
        // do whatever I want
    }

    // reset the index and work directory to HEAD
    Git.wrap( repository ).reset().setMode( ResetType.HARD ).call();
} 

我还尝试使用repository.writeMergeCommitMsg( null );repository.writeMergeHeads( null );来删除冲突合并的结果,因此我可以执行新的合并。但是,我得到了相同的结果:getMergeCommits()的以下执行中的空列表。似乎有关合并存在的信息已被删除。

我该怎么做才能跑出我想要的次数?在寻找答案时,我觉得我应该做一些类似于git merge --abort或类似的事情。可以在JGit中找到吗?我在上面的代码片段中缺少什么,或者从JGit合并场景中获取冲突行的最佳方法是什么?

0 个答案:

没有答案