如何使用 JGit 获取冲突行
How to get conflicting lines with JGit
我正在开发应用程序,其中使用了 JGit。
拉取后,我有冲突的文件。我可以从
List<String> list = git.status().call().getConflicting();
列表包含有冲突的文件。
我知道,我可以从
获取冲突的文件
Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts();
但如果我重新启动我的应用程序,它就不起作用了。重新启动后,我将有一个空映射,因为当存储库处于合并状态时我无法重做拉取。
如何通过 JGit API 根据文件名获取冲突行?
您可以尝试使用 ResolveMerger
重新 运行 合并,如下所示:
ThreeWayMerger merger = StrategyResolve.newMerger(repository, true);
merger.merge(headCommit, fetchedCommit);
请注意,在拉取期间调用的 MergeCommand
可能会使用不同的合并策略。有关详细信息,请参阅 MergeCommand ~ 第 337 行。但是,请确保创建一个 in-core 合并(第二个参数必须是 true
)。
使用 merger.getMergeResults()
你应该能够得到冲突的行。
但是,整个方法可能会失败,因为您的工作目录已经充满冲突标记 (<<<<<<<<)。根据您的总体目标,我建议重新考虑您的拉动方法。
如果您从上游存储库中获取更改(不立即合并),您可以根据需要尽可能多地干燥 运行 如上所述的合并。 FetchCommand::call()
返回的 FetchResult
包含有关已提取的提交的信息。
我正在开发应用程序,其中使用了 JGit。
拉取后,我有冲突的文件。我可以从
List<String> list = git.status().call().getConflicting();
列表包含有冲突的文件。
我知道,我可以从
获取冲突的文件Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts();
但如果我重新启动我的应用程序,它就不起作用了。重新启动后,我将有一个空映射,因为当存储库处于合并状态时我无法重做拉取。
如何通过 JGit API 根据文件名获取冲突行?
您可以尝试使用 ResolveMerger
重新 运行 合并,如下所示:
ThreeWayMerger merger = StrategyResolve.newMerger(repository, true);
merger.merge(headCommit, fetchedCommit);
请注意,在拉取期间调用的 MergeCommand
可能会使用不同的合并策略。有关详细信息,请参阅 MergeCommand ~ 第 337 行。但是,请确保创建一个 in-core 合并(第二个参数必须是 true
)。
使用 merger.getMergeResults()
你应该能够得到冲突的行。
但是,整个方法可能会失败,因为您的工作目录已经充满冲突标记 (<<<<<<<<)。根据您的总体目标,我建议重新考虑您的拉动方法。
如果您从上游存储库中获取更改(不立即合并),您可以根据需要尽可能多地干燥 运行 如上所述的合并。 FetchCommand::call()
返回的 FetchResult
包含有关已提取的提交的信息。