这是一个非常重要的操作。
这是一个非常简单的接口。
这是一个没多少内容又不得不提的主题。
直接上代码
git_repository *rep = nullptr;
git_clone_options opt = GIT_CLONE_OPTIONS_INIT;
opt.fetch_opts.callbacks.credentials = cred_acquire_cb;
git_clone(&rep, "git@github.com:XiaochenFTX/libgit2_samples.git", path, &opt);
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;
}
需要注意的就是不要忘记身份验证,然后就开始 clone 操作了。
最后就简单介绍一下 git_clone_options 的主要参数:
checkout_opts
checkout 的配置,如果需要的话
fetch_opts
fetch 的配置,如果需要的话
bare
0 表示标准仓库,1 表示 bare 仓库
local
决定是否拷贝目标数据库而不是 fetch 。(如果目标是在本地,直接拷贝会更快一些)
checkout_branch
切到哪个分支,如果是空使用远端默认的分支
repository_cb
在这个回调里可以自己创建一个 repository
remote_cb
在这个回调里可以自己创建一个 remote
关于 bare 这个参数,不仅仅在 clone 这个操作用到。在 init 或 open 也是同样的意思。
表示只有版本记录,没有实际的工程里的代码和文件那些东西。更具体一点就是除了 .git 这个文件夹以外啥都没有。
示例代码:sample10
挽尊
呵呵