libgit2使用教程(十一)git push

将本地分支上传到远端,如果前面的各个功能都掌握了的话,这个接口可以算是非常简单的了。

需要注意的细节就是 1. 身份验证;2. refspecs

验证证书的回调,是通过 git_push_options 这个结构传递的,与之前一样的 callbacks 参数。详情可以参考前面的

int cred_acquire_cb(git_cred **cred, const char *url, const char *username_from_url, unsigned int allowed_types,
                    void *payload)
{
    git_cred_ssh_key_new(cred, username_from_url, nullptr, "/Users/xiaochen/.ssh/id_rsa", nullptr);
    return 0;
}
git_push_options opts = GIT_PUSH_OPTIONS_INIT;
opts.callbacks.credentials = cred_acquire_cb;

refspecs 是用来指定这个 push 操作的本地分支和远端分支。它的格式是本地分支远端目标分支中间以冒号隔开。

比如我要把本地的 master 推到远端,碰巧远端对应的分支也叫 master,那好,它就是这个样子的:
refs/heads/master:refs/heads/master

当然,我们必须制定远端目标,因为它不一定仅仅是 origin:

git_remote *remote = nullptr;
git_remote_lookup(&remote, rep, "origin");

那么最终,push 操作的代码就是:

const char *refs[] = {"refs/heads/master:refs/heads/master"};
git_strarray strarr = {(char **) refs, 1};
opts.callbacks.credentials = cred_acquire_cb;
git_remote_push(remote, &strarr, &opts);

示例代码:sample11

《libgit2使用教程(十一)git push》有一个想法

  1. 请教一下,我想推送分支后,服务器自动接收后合并,想要做到类似git push origin v1:v1 –push-option=arg 这种推送参数,这个push option的参数在哪个地方加呢? 找了一圈没看哪个参数或者回调比较像呢。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

RSS
Follow by Email
YouTube
YouTube
Pinterest
fb-share-icon
LinkedIn
Share
VK
Weibo
WeChat
WhatsApp
Reddit
FbMessenger
Copy link
URL has been copied successfully!