问题描述
我在 GNU/Linux 上使用 libgit2 0.2.27-1。我正在尝试在我的应用程序 (C++) 中连接到 Github 的封闭存储库。但我遇到了一个问题。我测试了自己的应用程序并尝试输入一些错误的凭据。使用 libgit2 (C),我无法知道身份验证何时失败。只要它构建一个空的 git 结构,这对我来说就是一个问题。如果我提供了正确的凭据,一切都很好。 当我启动我的函数时,我会监控更新(下载、对象、索引...),但是如果我输入了错误的凭据,该函数将永远不会返回并且永远不会给出错误(git_last_error(),在我的版本中为 giterr_last())。此外,我找不到任何适合我的情况的回调处理程序。我也没有找到中止 git_clone 的方法。这是我使用的:
int do_clone(const char *url,const char *path)
{
progress_data pd = ;
git_repository *cloned_repo = nullptr;
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
git_checkout_options checkout_opts = GIT_CHECKOUT_OPTIONS_INIT;
int error;
// Set up options
*cons << "Setuping clone operation...";
checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
checkout_opts.progress_cb = checkout_progress;
checkout_opts.progress_payload = &pd;
clone_opts.checkout_opts = checkout_opts;
clone_opts.fetch_opts.callbacks.sideband_progress = sideband_progress;
clone_opts.fetch_opts.callbacks.transfer_progress = &fetch_progress;
clone_opts.fetch_opts.callbacks.credentials = cred_acquire_cb;
clone_opts.fetch_opts.callbacks.payload = &pd;
*cons << "Setup finished.";
// Do the clone
*cons << "Started cloning.";
error = git_clone(&cloned_repo,url,path,&clone_opts);
*cons << "FINISHED: " << error << "\n";
if (error != 0) {
const git_error *err = giterr_last();
if (err) {
*cons << "ERROR " << err->klass << ": " << err->message << "\n";
} else {
*cons << "ERROR " << error << ": no detailed info\n";
}
} else if (cloned_repo) {
git_repository_free(cloned_repo);
}
return error;
}
*注意所有代码都是有效的。我只是想念如何停止该功能或如何知道身份验证失败的时间。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)