【问题标题】:how to clone GitHub repo locally via libgit2sharp?如何通过 libgit2sharp 在本地克隆 GitHub 存储库?
【发布时间】:2015-06-13 01:11:00
【问题描述】:

我编写了代码以通过 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 首先创建一个本地 dir 文件夹以克隆到。

libgit2sharp Repository.Clone() 的工作方式是否不同?

【问题讨论】:

  • mods :不应该拒绝投票才能留下评论解释原因吗?我看不出我的问题有什么问题
  • 由于 '\',也许您应该使用逐字字符串作为路径,并在其前面加上 @
  • 您的异常堆栈跟踪似乎与您的代码示例不匹配。您使用的是哪个版本的 LibGit2Sharp? cloneResult 包含什么?
  • 很奇怪,但我最初发布的堆栈跟踪不正确。我已经更新了正确的堆栈跟踪和 libgit2sharp 版本 v0.21.0.176。因为抛出异常,cloneResult 永远不会被设置,所以它的值保持为空。路径实际上是动态生成的,但我尝试使用 static-paths @"{path}" 并引发了相同的异常。

标签: git github git-clone libgit2sharp


【解决方案1】:

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

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

您没有提供任何方式让 libgit2(sharp) 向您询问用户的凭据。您需要传入CloneOptions,其中您将CredentialsProvider 设置为授权用户的凭据。

【讨论】:

  • 克隆时无法下载bin文件夹
猜你喜欢
  • 2020-09-21
  • 2020-08-27
  • 2021-12-31
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多