libgit2(获取和合并与提交)

时间:2015-01-03 21:21:05

标签: libgit2

我正试图从libgit2回购。

我的步骤是:

  • git_remote_connect - 确定
  • git_remote_download还是我应该使用git_remote_fetch?
  • git_remote_ls获取HEAD传递给git_annotated_commit_from_fetchhead(这是coorect?)。但是有超过1个头,我是否通过了“HEAD”这个名字?
  • git_merge。

这导致.git文件夹中的MERGE_HEAD然后我能够与现有提交合并。

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

1 个答案:

答案 0 :(得分:4)

您可能希望使用git_remote_fetch,而不是git_remote_downloadfetch是一个便利功能,可以执行下载更新,例如远程跟踪分支,以指向服务器上的数据,更重要的是 - {{1}文件。

您可以通过检查FETCH_HEAD行并确定标记为git_merge的分支来确定要向FETCH_HEAD提供的分支。最简单的方法是使用not-for-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 core和libgit2在获取时都会创建git_merge,在合并时会创建FETCH_HEAD。合并正在进行时,您将只看到后者 - 因此,如果您在命令行上运行MERGE_HEAD或者您有冲突。您可以使用它来比较git core生成的数据,以确保使用libgit2生成相同的数据。