Как использовать libgit2sharp с ssh-транспортным протоколом?

Когда я использую libgit2sharp в проекте для клонирования репозитория с протоколом ssh-transport, например

[email protected]:libgit2/libgit2sharp.git 

Он выдает исключение, говорит: «Этот транспорт не реализован. Извините».

Как я могу клонировать репозиторий с протоколом ssh-transport с помощью libgit2sharp?


person hutusi    schedule 16.06.2014    source источник


Ответы (2)


К сожалению, протокол Ssh пока не поддерживается. В настоящее время доступны только протоколы git:// (только для чтения) и http[s]://.

Однако в конечном итоге это произойдет благодаря использованию библиотеки libssh2.

Подписка на уведомления ошибке № 255 будет держать вас в курсе прогресс, достигнутый в отношении этой функции.

Обновлять:

Над libgit2 ведутся работы (см. PR #2428). ), что должно помочь нам заставить LibGit2Sharp справиться с протоколом ssh раньше, чем позже.

Обновление 2:

PR #852 работает над тем, чтобы сделать ssh доступным для LibGit2Sharp.

person nulltoken    schedule 16.06.2014
comment
Спасибо за этот ответ! Итак, теперь нет способа клонировать/протолкнуть репозиторий git с ключами ssh, используя LibGit2Sharp в приложении C#? - person Gábor Domonkos; 31.07.2014
comment
Еще нет. Но LibGit2Sharp в конечном итоге разрешит эту функцию. - person nulltoken; 24.08.2014
comment
Похоже, есть некоторый прогресс в libgit2 на этом github.com/libgit2/libgit2/pull/2600< /а> - person Richard Mitchell; 18.11.2014
comment
@RichardMitchell Подписка на github.com/libgit2/libgit2sharp/pull/852 также будет хорошая идея ;-) - person nulltoken; 18.11.2014
comment
Из общего интереса, когда это произойдет, Visual Studio автоматически получит эту поддержку? Связана ли (потрясающая) поддержка Git в VS с этой или другой зависимостью? - person Luke Puplett; 21.11.2014
comment
Если / когда это попадет в LibGit2Sharp, оно не будет автоматически включено в Visual Studio. Извиняюсь. У нас есть политика не поставлять криптосистемы или программное обеспечение, которое их реализует (например, libssh2), без проверки. - person Edward Thomson; 21.11.2014
comment
Можем ли мы получить обновление 3? Пытался идти по следу, но через 10 минут все еще не нашел текущий статус - person Kyle Gobel; 27.06.2016

К сожалению, LibGit2Sharp не включает необходимые криптобиблиотеки из коробки (https://github.com/libgit2/libgit2sharp/issues/255#issuecomment-212580185).

Используйте пакет NuGet LibGit2Sharp-SSH (форк).

private void Run()
{
    var url = "ssh://[email protected]/some/repository.git";
    var path = @"C:\Temp\some-repository";

    LibGit2Sharp.Repository.Clone(url, path, new LibGit2Sharp.CloneOptions { CredentialsProvider = MyCredentialsProvider });
}

private Credentials MyCredentialsProvider(string url, string usernameFromUrl, SupportedCredentialTypes types)
{
    var sshDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".ssh");

    return new LibGit2Sharp.SshUserKeyCredentials()
    {
        Username = usernameFromUrl,
        Passphrase = string.Empty,
        PublicKey = Path.Combine(sshDir, "id_rsa.pub"),
        PrivateKey = Path.Combine(sshDir, "id_rsa"),
    };
}
person Der_Meister    schedule 18.06.2017
comment
Из этого примера видно, что вы не можете заставить его реализацию SSH автоматически искать пользовательские ключи и должны угадывать, по каким путям они могут находиться — вручную в своем коде. Что нетривиально. Часть для выбора ключей из %USERPROFILE%\.ssh полностью отсутствует в libssh2? Или можно включить? - person hypersw; 25.01.2018
comment
Я не знаю о внутренностях LibGit2Sharp, но вы можете попробовать вручную разобрать файл .ssh\config. cyberciti.biz/faq/create-ssh-config -file-on-linux-unix - person Der_Meister; 26.01.2018
comment
Мой код выдает ошибку протокола еще до того, как он достигает поставщика учетных данных, поэтому это не может быть ключевой проблемой. Судя по всему, в libssh2 был изъян и теперь эта библиотека не может подключиться ни к каким пропатченным серверам??? - person Triynko; 20.11.2018
comment
Кстати, это нерабочий пример кода, в котором используются переменные, которые нигде не определены в вашем примере кода. - person C Johnson; 02.10.2019
comment
Какие переменные не определены? - person Der_Meister; 02.10.2019