Question

I am trying to clone a git repository from the local file system:

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");
        }
    }
}

and I get an exception:

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

I've also tried the following source url:

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

and got another exception:

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 is never created.

If on the other hand I use HTTP transport, the Repository.Clone method works fine:

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

So my question is if I am doing something wrong or if this is unsupported feature or a bug in the native git2.dll?

Was it helpful?

Solution

So my question is if I am doing something wrong or if this is unsupported feature or a bug in the native git2.dll?

A bit a both, actually.

  • The first exception is clearly a bug. This should not happen and will be troubleshot.
  • The second one requires a deeper analysis. Would you be so kind as to open a issue in the LibGit2Sharp project?

Good news are that a pull request from BenStraub was recently merged. This pull request implements the local fetch transport which should pretty solve the issue.

LibGit2Sharp will be updated in the following days with a new a new version of libgit2 binaries which should allow you perform a local clone/fetch. I'll update this answer as soon as it's been done.

Update

This test shows how do to a Clone and a Push over against a local repository.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top