libgit2(获取&合并&提交)
libgit2 (fetch & merge & commit)
我正在尝试使用 libgit2.
从一个 repo 中提取
我的步骤是:
- git_remote_connect - 好的
- git_remote_download 还是我应该使用 git_remote_fetch?
- git_remote_ls 获取要传递给 git_annotated_commit_from_fetchhead 的 HEAD(这是 coorect 吗?)。但是头不止1个,我要传"HEAD"名字的那个吗?
- git_merge.
这会在 .git 文件夹中生成 MERGE_HEAD,然后我可以与现有提交合并。
问题是,上面的顺序正确吗?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?
您可能想使用 git_remote_fetch
,而不是 git_remote_download
。 fetch
是一个方便的功能,它执行下载 和 更新诸如远程跟踪分支之类的内容以指向服务器上的数据,并且 - 对您来说更重要的是 - 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.
生成相同的数据
我正在尝试使用 libgit2.
从一个 repo 中提取我的步骤是:
- git_remote_connect - 好的
- git_remote_download 还是我应该使用 git_remote_fetch?
- git_remote_ls 获取要传递给 git_annotated_commit_from_fetchhead 的 HEAD(这是 coorect 吗?)。但是头不止1个,我要传"HEAD"名字的那个吗?
- git_merge.
这会在 .git 文件夹中生成 MERGE_HEAD,然后我可以与现有提交合并。
问题是,上面的顺序正确吗?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?
您可能想使用 git_remote_fetch
,而不是 git_remote_download
。 fetch
是一个方便的功能,它执行下载 和 更新诸如远程跟踪分支之类的内容以指向服务器上的数据,并且 - 对您来说更重要的是 - 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.