Поддерживает ли LibGit2Sharp клонирование репозитория из локальной файловой системы?

Я пытаюсь клонировать репозиторий 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?


person Darin Dimitrov    schedule 16.11.2012    source источник


Ответы (1)


Итак, мой вопрос: делаю ли я что-то неправильно, или это неподдерживаемая функция или ошибка в родной git2.dll?

На самом деле немного и то, и другое.

  • Первое исключение явно является ошибкой. Это не должно происходить и будет устранено.
  • Второй требует более глубокого анализа. Не могли бы вы открыть вопрос в проекте LibGit2Sharp?

Хорошей новостью является то, что запрос на вытягивание от BenStraub недавно был объединен. Этот запрос на извлечение реализует локальный транспорт извлечения, который должен решить проблему.

В ближайшие дни LibGit2Sharp будет обновлен новой версией двоичных файлов libgit2, которая позволит вам выполнить локальное клонирование/выборку. Я обновлю этот ответ, как только это будет сделано.

Обновлять

Этот тест< /strong> показывает, как выполнить клонирование и отправку в локальный репозиторий.

person nulltoken    schedule 16.11.2012
comment
Спасибо, выпуск открыт: github.com/libgit2/libgit2sharp/issues/247. С нетерпением жду новой версии libgit2. - person Darin Dimitrov; 16.11.2012