2016-08-05 120 views
1

我正在开发使用JGit的应用程序。如何与JGit冲突线

拉出后,我有冲突的文件。我可以从

List<String> list = git.status().call().getConflicting(); 

该列表包含冲突的文件。

我知道,我可以从

Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts(); 

得到冲突的文件,但如果我重新启动我的应用程序这是行不通的。重新启动后,我将会有一个空映射,因为当存储库处于合并状态时,我无法重新执行pull操作。

如何通过JGit API获取文件名冲突的行?

回答

1

你可以尝试使用ResolveMerger重新运行合并,像这样:

ThreeWayMerger merger = StrategyResolve.newMerger(repository, true); 
merger.merge(headCommit, fetchedCommit); 

注意,即拉期间称为MergeCommand可以使用不同的合并策略。详情请参阅MergeCommand〜337行。但是,请确保创建内核合并(第二个参数必须为true)。

随着merger.getMergeResults()你应该能够得到冲突的线。

整个逼近,然而,可能会失败,因为你的工作目录是冲突标记已经脏(< < < < < < < <)。根据您的总体目标,我建议您重新考虑您的拉动方法。

如果您从上游存储库中提取更改(不立即合并),您可以按照上面概述的那样按需进行干运行合并。由FetchCommand::call()返回的FetchResult包含有关提取的提交的信息。

+0

感谢您的回答。我会检查它tommorow和写文章。 –

+0

这是工作。现在,我尝试了解MergeResult 的API。非常感谢 –