如何通过libgit2sharp本地克隆GitHub仓库?

3
我编写了代码,通过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()的工作方式是否不同?


mods:难道不应该要求在进行负面评价时留下解释吗?我不明白我的问题有什么问题。 - BaltoStar
由于反斜杠\的存在,你可能需要在路径前加上@来使用逐字字符串。 - Philippe
你的异常堆栈跟你的代码示例似乎不匹配。你使用的是哪个版本的LibGit2Sharp?cloneResult包含什么? - nulltoken
非常奇怪,但我最初发布的堆栈跟踪是不正确的。我已经更新了正确的堆栈跟踪和libgit2sharp版本v0.21.0.176。由于异常抛出,cloneResult从未被设置,因此其值保持为null。路径实际上是动态生成的,但我尝试使用静态路径@"{path}",结果仍然抛出相同的异常。 - BaltoStar
这里有一个带有解释的工作示例:https://dev59.com/L4Hba4cB1Zd3GeqPPEmw#72602335 - ssamko
1个回答

5

401是HTTP状态码,意味着您需要对服务器进行身份验证。在libgit2中,有些代码路径并不总是正确地将此情况转换为GIT_AUTH,但这就是它的意思。

Github(和其他服务)也会在存储库不存在时返回此错误,以避免泄露私人存储库的存在信息。

您没有为libgit2(sharp)提供请求用户凭据的任何方式。您需要传递CloneOptions,其中包含设置为授权用户凭据的CredentialsProvider


克隆时bin文件夹未下载。 - Karthic G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接