将本地分支上传到远端,如果前面的各个功能都掌握了的话,这个接口可以算是非常简单的了。
需要注意的细节就是 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
请教一下,我想推送分支后,服务器自动接收后合并,想要做到类似git push origin v1:v1 –push-option=arg 这种推送参数,这个push option的参数在哪个地方加呢? 找了一圈没看哪个参数或者回调比较像呢。