4

我正在尝试从本地文件系统克隆一个 git 存储库:

using System;
using LibGit2Sharp;

class Program
{
    static void Main()
    {
        var sourceUrl = @"file:///c:/work/libgit2sharp";
        using (Repository.Clone(sourceUrl, "targetDir", bare: true))
        {
            Console.WriteLine("repository successfully cloned");
        }
    }
}

我得到一个例外:

Unhandled Exception: LibGit2Sharp.LibGit2SharpException: An error was raised by libgit2. Category = Odb (Error).
Failed to find the memory window file to deregister
   at LibGit2Sharp.Core.Ensure.Success(Int32 result, Boolean allowPositiveResult) in c:\work\libgit2sharp\LibGit2Sharp\Core\Ensure.cs:line 85
   at LibGit2Sharp.Core.Proxy.git_clone_bare(String url, String workdir, git_transfer_progress_callback transfer_cb) in c:\work\libgit2sharp\LibGit2Sharp\Core\Proxy.cs:line 219
   at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, Boolean bare, Boolean checkout, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress) in c:\work\libgit2sharp\LibGit2Sharp\Repository.cs:line 431
   at Program.Main() in c:\work\ConsoleApplication1\Program.cs:line 10

我还尝试了以下源网址:

var sourceUrl = @"c:\work\libgit2sharp\.git\";

并得到另一个例外:

Unhandled Exception: LibGit2Sharp.LibGit2SharpException: An error was raised by libgit2. Category = Config (Error).
Failed to parse config file: Unexpected end of file while parsing multine var (in c:/work/ConsoleApplication1/bin/Debug/targetDir/config:23, column 0)
   at LibGit2Sharp.Core.Ensure.Success(Int32 result, Boolean allowPositiveResult) in c:\work\libgit2sharp\LibGit2Sharp\Core\Ensure.cs:line 85
   at LibGit2Sharp.Core.Proxy.git_clone_bare(String url, String workdir, git_transfer_progress_callback transfer_cb) in c:\work\libgit2sharp\LibGit2Sharp\Core\Proxy.cs:line 219
   at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, Boolean bare, Boolean checkout, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress) in c:\work\libgit2sharp\LibGit2Sharp\Repository.cs:line 431
   at Program.Main() in c:\work\ConsoleApplication1\Program.cs:line 12

targetDir永远不会被创建。

另一方面,如果我使用 HTTP 传输,则该Repository.Clone方法可以正常工作:

var sourceUrl = "https://github.com/libgit2/libgit2sharp";

所以我的问题是我做错了什么,或者这是不支持的功能还是本机中的错误git2.dll

4

1 回答 1

4

所以我的问题是我做错了什么,或者这是不支持的功能还是本机 git2.dll 中的错误?

实际上,两者兼而有之。

  • 第一个例外显然是一个错误。这不应该发生,并且会出现问题。
  • 第二个需要更深入的分析。您能在 LibGit2Sharp 项目中打开一个问题吗?

好消息是最近合并了来自BenStraub的拉取请求。这个拉取请求实现了本地获取传输,应该可以很好地解决这个问题。

LibGit2Sharp 将在接下来的几天内使用新版本的 libgit2 二进制文件进行更新,它应该允许您执行本地克隆/获取。我会在完成后立即更新这个答案。

更新

测试展示了如何对本地存储库进行克隆和推送。

于 2012-11-16T08:00:39.200 回答