我正在尝试从 libgit2 的 repo 中提取。
我的步骤是这些:
这导致 .git 文件夹中的 MERGE_HEAD ,然后我可以与现有提交合并。
问题是,上面的顺序是否正确?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?
您可能想要使用git_remote_fetch,而不是git_remote_download。 fetch是一个方便的函数,它执行下载和更新诸如远程跟踪分支之类的东西,以指向服务器上的数据——对你来说更重要的是——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
Run Code Online (Sandbox Code Playgroud)
然后,当您从 获取时origin,相应的远程master分支将被标记为for-merge。一旦你确定了这个FETCH_HEAD条目,你就可以从它创建一个带注释的提交并调用git_merge.
请注意,git core 和 libgit2 将FETCH_HEAD在获取MERGE_HEAD时创建s,在合并时创建s 。您只会在合并正在进行时看到后者 - 因此,如果您merge --no-commit在命令行上运行或遇到冲突。您可以使用它来比较 git core 生成的数据,以确保您使用 libgit2 生成相同的数据。
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |