LibGit2Sharp:"太多重定向或身份验证重放"提取失败

Rov*_*ari 1 libgit2 libgit2sharp

这是我用来获取的代码:

public static void GitFetch()
{
    var creds = new UsernamePasswordCredentials()
                {Username = "user",
                 Password = "pass"};
    var fetchOpts = new FetchOptions {Credentials = creds};
    using (repo = new Repository(@"C:\project");)
    {
        repo.Network.Fetch(repo.Network.Remotes["origin"], fetchOpts);
    }
}
Run Code Online (Sandbox Code Playgroud)

但在获取期间失败并出现以下异常:

LibGit2Sharp.LibGit2SharpException: Too many redirects or authentication replays
Result StackTrace:  
at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
   at LibGit2Sharp.Core.Proxy.git_remote_fetch(RemoteSafeHandle remote, Signature signature, String logMessage)
   at LibGit2Sharp.Network.DoFetch(RemoteSafeHandle remoteHandle, FetchOptions options, Signature signature, String logMessage)
   at LibGit2Sharp.Network.Fetch(Remote remote, FetchOptions options, Signature signature, String logMessage)
Run Code Online (Sandbox Code Playgroud)

我已经验证配置文件具有所需的远程名称,并且git fetch可以从命令行运行.我发现异常起源于libgit2\src\transport\winhttp.c但我无法提出解决方法/解决方案.

Rov*_*ari 5

我通过以下方式尝试了@Carlos的建议:

public static void GitFetch()
{
    var creds = new UsernamePasswordCredentials()
                {Username = "user",
                 Password = "pass"};
    CredentialsHandler credHandler = (_url, _user, _cred) => creds;
    var fetchOpts = new FetchOptions { CredentialsProvider = credHandler };
    using (repo = new Repository(@"C:\project");)
    {
        repo.Network.Fetch(repo.Network.Remotes["origin"], fetchOpts);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以从github上的公共存储库以及bitbucket上的密码保护私有存储库获取; 但是,对于在工作中通过LAN托管的存储库,我无法做同样的事情.事实证明它们的配置方式不受UsernamePasswordCredentialslibgit2sharp的影响.以下修改允许我通过LAN从存储库中获取:

    CredentialsHandler credHandler = (_url, _user, _cred) => new DefaultCredentials();
Run Code Online (Sandbox Code Playgroud)

(我试图找出两者之间的确切区别;如果我进一步了解它,我会更新答案.)

  • 不同之处在于,使用给定的用户名和密码进行身份验证,"DefaultCredentials"使用您登录的凭据进行身份验证.`UsernamePasswordCredentials`应该与Basic和NTLM一起使用.DefaultCredentials应该与NTLM和Kerberos一起使用. (4认同)