java - 如何使用 JGit 获取冲突行

标签 java jgit

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

拉取后,我遇到了冲突的文件。我可以从

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

列表包含冲突文件。

我知道,我可以从中获取冲突的文件

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

但如果我重新启动我的应用程序,它就不起作用。重新启动后,我将得到一个空 map ,因为当存储库处于合并状态时我无法重做拉取。

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

最佳答案

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

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

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

使用 merger.getMergeResults() 您应该能够获取冲突的行。

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

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

关于java - 如何使用 JGit 获取冲突行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38792964/

相关文章:

java - JGit:如何获取分支的所有提交? (不改变工作目录...)

java - 是否可以通过图形用户界面 (GUI) 与 Linux 命令行界面 (CLI) 交互?

java - Java 中 Trie 上的 DFS 和 BFS

java - 使用 Oauth2.0 在 Spring MVC 中进行灵活身份验证的库

java - 让用户输入要存储的类/扫描器的名称?

java - 如何找到本地分支的远程分支

java - 在 JavaGit、JGit 和 EGit 之间选择的困惑

java - JGit:在分支中的提交处读取文件的内容

java - 通过 Solr 中的分片跨核返回二进制文件

java - 添加文件时出现 JGitInternalException