在libgit2sharp中使用TFS PAT进行授权

在libgit2sharp中使用TFS PAT进行授权,git,tfs,libgit2,libgit2sharp,Git,Tfs,Libgit2,Libgit2sharp,我想使用LibGit2Sharp访问内部TFS服务器GIT存储库。到目前为止,我只是在玩这个库,我不能让它像我期望的那样工作 我的第一个问题是个人访问令牌的授权。我可以使用UsernamePasswordCredentials克隆存储库,提供我公司的电子邮件和密码,但是,我找不到使用PAT的方法来克隆存储库。我找不到任何关于它的可靠信息,所以我尝试以不同的组合使用它,比如用它替换我的密码/用户名,但我无法让它工作-我总是得到LibGit2Sharp.LibGit2SharpException:“

我想使用LibGit2Sharp访问内部TFS服务器GIT存储库。到目前为止,我只是在玩这个库,我不能让它像我期望的那样工作

我的第一个问题是个人访问令牌的授权。我可以使用UsernamePasswordCredentials克隆存储库,提供我公司的电子邮件和密码,但是,我找不到使用PAT的方法来克隆存储库。我找不到任何关于它的可靠信息,所以我尝试以不同的组合使用它,比如用它替换我的密码/用户名,但我无法让它工作-我总是得到LibGit2Sharp.LibGit2SharpException:“太多重定向或身份验证重放”

这意味着凭据无效,但我确信我的令牌是有效的,并且我授权了所有作用域,因此它应该能够使用我的凭据执行我能够执行的所有操作。是否有一个我可以遵循的示例来启动和运行它?以下是我当前使用用户名和密码的解决方案:

        var co = new CloneOptions();
        co.CredentialsProvider = (_url, _user, _cred) =>
            new UsernamePasswordCredentials
            {
                Username = "username@companyname.com",
                Password = "password"
            };

        Repository.Clone(@"remoteUrl-received-from-api", "destination-folder", co);
我的另一个问题是,从这个API端点接收到哪个URL:传递给LibGit2Sharp的URL正确吗?我正在使用“remoteUrl”(这是TFS web应用程序URL)进行克隆,当提供用户名和密码时,它可以工作,但是Repository.IsValid返回false。我不太熟悉TFS和GIT,所以请原谅我在这方面完全缺乏知识


如果我明天不能让它正常工作,我将不得不使用cmd.exe进程和控制台命令,我真的很想避免使用这些命令-因此,任何帮助都将非常有用。

在libgit2sharp中,似乎传递令牌,因为带有空密码的用户名特定于GitHub。这可能不适用于TFS/VSTS托管的git repo

看看GITHUB中的这个相关问题:

对于TFS/VST,如果您不想使用UsernamePasswordCredentials提供您公司的电子邮件和密码,您可以使用替代身份验证凭据

对于url,应该使用TFS git remoterepo url。更多详细示例请参考此链接:

您可以使用备用凭据对VST进行身份验证。下面的代码显示如何向VST进行身份验证并执行克隆作业

using LibGit2Sharp;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string surl = "https://youraccount.visualstudio.com/DefaultCollection/_git/Remoterepo";
            string lpath = "C:\\LocalPath";
            CloneOptions co = new CloneOptions();
            string un = "alternativeusername";
            string pwd = "alternativepassword";
            Credentials ca = new UsernamePasswordCredentials() {Username = un, Password = pwd };
            co.CredentialsProvider = (_url, _user, _cred) => ca ;
            Repository.Clone(surl,lpath,co);
        }
    }
}

在Azure DevOps(VSTS)上使用任何用户名和个人访问令牌作为密码与git一起使用。通过这种方式,您可以将访问限制到最低限度

假设您的克隆选项、获取选项。。。变量名为“o”:


我不知道它是否适用于TFS。

谢谢,我担心情况就是这样。PAT似乎也不能使用git控制台命令,因此没有真正的替代凭证/替代凭证。实际上,您通常可以将git命令与PAT一起使用,如下所示:git-c http.extraheader=“AUTHORIZATION:bearer$($env:System\u AccessToken)”fetchI专门寻找VST/Azure Devops,于是出现了这个问题。非常感谢!你从哪里得到的信息?很高兴我能帮上忙!我不记得在哪里找到这些信息。
o.CredentialsProvider = (url, fromUrl, types) => new UsernamePasswordCredentials(){Username="Anything", Password = "Your personal access token here" };