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

次のソースURLも試しました。

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のバグなのかということです。

実際には、少し両方です。

  • 最初の例外は明らかにバグです。これは発生しないはずであり、トラブルショットになります。
  • 2つ目は、より詳細な分析が必要です。LibGit2Sharpプロジェクトで問題を開いていただけませんか。

幸いなことに、 BenStraubからのプルリクエストが最近マージされました。このプルリクエストは、問題をかなり解決するはずのローカルフェッチトランスポートを実装します。

LibGit2Sharpは、ローカルのクローン/フェッチを実行できるようにする新しいバージョンのlibgit2バイナリで次の日に更新されます。完了次第、この回答を更新します。

アップデート

このテストは、ローカルリポジトリに対してクローンとプッシュオーバーを行う方法を示しています。

于 2012-11-16T08:00:39.200 に答える