如何使用JGit获得冲突的行

时间:2016-08-05 15:33:46

标签: java jgit

我正在开发使用JGit的应用程序。

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

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

该列表包含冲突文件。

我知道,我可以从

中获取有冲突的文件
Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts();

但如果我重新启动我的应用程序,它就无法运行。重新启动后,我将有一个空地图,因为当存储库处于合并状态时,我无法重做拉动。

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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用ResolveMerger重新运行合并,如下所示:

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

请注意,在pull期间调用的MergeCommand可能使用不同的合并策略。有关详细信息,请参阅MergeCommand~line 337。但是,请确保创建 in-core 合并(第二个参数必须为true)。

使用merger.getMergeResults(),您应该可以获得冲突的行。

然而,整个方法可能会失败,因为您的工作目录已经因冲突标记(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;根据您的总体目标,我建议您重新考虑您的拉动方式。

如果您从上游存储库获取更改(不立即合并),您可以根据需要经常干运行合并。 FetchResult返回的FetchCommand::call()包含有关提取的提交的信息。