我正在尝试以编程方式克隆git存储库。我的ASP.NET MVC应用程序正在创建和启动一个进程。处理进程的代码可以正常工作,但是当尝试使用TFS内部部署PAT来克隆git存储库时,身份验证失败。我无法使用NTLM或要求用户输入凭据。我可以确认我的C#代码处理创建进程以编程方式使用git bash shell,因为我在本地计算机上没有问题但在IIS上生产时出现了问题。我尝试了以下两种方法。
方法1 :git clone http:// anyusername :PAT @ tfs2017:8080 / tfs / DefaultCollection / _git / Git%20Repository
PAT 是我为用户生成的令牌。我也试过在base64中对它进行编码。
方法2 :正如MS社交论坛上的人所建议的那样。
git -c http.extraheader =“AUTHORIZATION:bearer { base64encodedPAT }”clone { url }
答案 0 :(得分:8)
如果您有PAT,则不需要密码:PAT将作为您的用户名 看看以下是否有效:
git clone http://PAT@tfs2017:8080/tfs/DefaultCollection/_git/Git%20Repository
答案 1 :(得分:3)
您可以通过以编程方式将令牌添加到计算机来使用CredentialManager,这与CredentialManager执行此操作的方式相同。
在Windows上,我使用cmdkey
工具,如下所示:
cmdkey /generic:"git:https://yourdomain.visualstudio.com" /user:"Personal Access Token" /pass:"yourtokenhere"
在MacOS上,在钥匙串中添加一个条目:
security add-generic-password -a "Personal Access Token" -D "Credential" -s "gcm4ml:git:https://yourdomain.visualstudio.com" -w "yourtokenhere" -A
注意:避免使用允许任何应用程序访问它的-A。
只要在Git上安装了CredentialManager,它就可以工作。
答案 2 :(得分:3)
从MS阅读文章后,我有些困惑。在尝试了一些方法之后,我终于可以对TFS和VSTS GIT Repos使用我的PAT。
我能够使用PAT克隆GIT存储库的唯一方法是在GIT命令行中设置http.extraheader。授权标签必须指向基本身份验证,协议必须为HTTPS,令牌必须为BASE64编码,包括(虚构的)用户名。
示例: git -c http.extraheader =“授权:基本TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh”克隆https://tfs.address/tfs/Collection/Project/_git/RepoName >
使用的基本令牌BASE64编码为:TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh
基本令牌BASE64解码:MyGitSyncUser:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a
令牌是从构建的: 在此示例中: 虚构的用户名:MyGitSyncUser 二手PAT:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a
PAT范围:代码(读取)
TFS / VSTS目前不接受“:授权:承载”标头:(
也许这将帮助在TFS / VSTS中使用PAT的人。
注意:BASIC身份验证需要HTTPS!
答案 3 :(得分:1)
自从我花了几个小时就添加了我的2c。
我从DevOps生成了PAT,并复制了克隆URL,但是我一直得到“找不到存储库”
GIT clone https://<PAT>@dev.azure.com/Organization/My%20Project/_git/MyRepo
请注意,项目中有一个空格,并且已进行URL编码
这在DOS中不起作用-它可以解决
My0Project
您需要像这样对它进行两次转义:
GIT clone https://<PAT>@dev.azure.com/Organization/My%%20Project/_git/MyRepo