libgit2(获取&合并&提交)

libgit2 (fetch & merge & commit)

我正在尝试使用 libgit2.

从一个 repo 中提取

我的步骤是:

这会在 .git 文件夹中生成 MERGE_HEAD,然后我可以与现有提交合并。

问题是,上面的顺序正确吗?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?

您可能想使用 git_remote_fetch,而不是 git_remote_downloadfetch 是一个方便的功能,它执行下载 更新诸如远程跟踪分支之类的内容以指向服务器上的数据,并且 - 对您来说更重要的是 - FETCH_HEAD 文件.

您可以通过检查 FETCH_HEAD 行并确定 标记为 [=17= 的分支来确定将哪个分支提供给 git_merge ].最简单的方法是使用 git_repository_fetchhead_foreach 遍历它们。将为每一行调用您的回调,您只需记下将 for_merge 设置为 true 的那一行。标记为 for-merge 的分支将是对应于配置中 merge 行的远程分支。

也就是说如果你的HEAD指向master,你的配置是:

[branch "master"]
    remote = origin
    merge = refs/heads/master

然后当您从 origin 获取时,相应的远程 master 分支将被标记为 for-merge。一旦你确定了这个 FETCH_HEAD 条目,你就可以从它创建一个带注释的提交并调用 git_merge.

请注意,git 核心和 libgit2 都将在提取时创建 FETCH_HEAD,在合并时创建 MERGE_HEAD。您只会在合并正在进行时看到后者 - 所以如果您在命令行上 运行 merge --no-commit 或者如果您有冲突。您可以使用它来比较 git 核心生成的数据,以确保您使用 libgit2.

生成相同的数据