我编写代码以编程方式通过libgit2sharp(v0.21.0.176)将GitHub私有仓库克隆到本地仓库
var cloneOptions = new CloneOptions { BranchName = "master", Checkout = true };
var cloneResult = Repository.Clone( @"https://github.com/my-organization/my-repo.git", @"c:\github\my-organization\my-repo" );
抛出异常:
{LibGit2Sharp.LibGit2SharpException: Request failed with status code: 401
at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
at LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result)
at LibGit2Sharp.Core.Proxy.git_clone(String url, String workdir, GitCloneOptions& opts)
at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, CloneOptions options)
cloneResult值为null(由于抛出异常而从未设置)
请注意,无论是否存在\ my-repo \文件夹,都会抛出相同的401异常。
我的函数调用语法是否正确?
从命令行执行,git clone
首先创建一个要克隆的本地目录文件夹。
libgit2sharp Repository.Clone()
的工作方式不同吗?
答案 0 :(得分:1)
401是HTTP代码,意味着您需要对服务器进行身份验证。 libgit2中有一些代码路径并不总能正确地将这种情况转换为GIT_AUTH
,但这就是它的含义。
GitHub(和其他服务)也可以在存储库不存在时返回此错误,以避免泄露有关私有存储库存在的信息。
您没有为libgit2(sharp)提供任何方式来询问您的用户凭据。您需要将CloneOptions
设置的CredentialsProvider
传递给授权用户的凭据。