我正在开发使用JGit的应用程序。
拉了之后,我的文件有冲突。我可以从
获得它List<String> list = git.status().call().getConflicting();
该列表包含冲突文件。
我知道,我可以从
中获取有冲突的文件Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts();
但如果我重新启动我的应用程序,它就无法运行。重新启动后,我将有一个空地图,因为当存储库处于合并状态时,我无法重做拉动。
如何通过JGit API通过文件名获得冲突的行?
答案 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()
包含有关提取的提交的信息。