我正试图从libgit2回购。
我的步骤是:
这导致.git文件夹中的MERGE_HEAD然后我能够与现有提交合并。
问题是,上述顺序是否正确?为什么git创建FETCH_HEAD而libgit2有MERGE_HEAD?
答案 0 :(得分:4)
您可能希望使用git_remote_fetch
,而不是git_remote_download
。 fetch
是一个便利功能,可以执行下载和更新,例如远程跟踪分支,以指向服务器上的数据,更重要的是 - {{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生成相同的数据。