我无法从Azure DevOps克隆一个简单的存储库。 操作系统:Ubuntu 18.10
我这样做:
git clone https://myorganization.visualstudio.com/myproject/_git/myrepo/
我一直从Git收到此消息:
fatal: Authentication failed for 'https://myorganization.visualstudio.com/myproject/_git/myrepo/'
我正在阅读其他人的解决方案,但没有一个对我有用。 我也尝试过:
Authorization: Basic Base64Encoded(uname:PAT)
Authorization: Bearer PAT
有什么线索为什么这行不通?
答案 0 :(得分:4)
我也遇到过同样的问题,并且花了很长时间寻找解决方案。我终于碰到了this post,其中包含Martinius79的注释部分中的解决方案。
简而言之,需要通过git http.extraheaders传递编码为base64的用户名和PAT,以便进行身份验证。
100%归功于原始作者,只在此处添加它以帮助其他人找到它:
示例: git -c http.extraheader =“授权:基本TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh”克隆https://tfs.address/tfs/Collection/Project/_git/RepoName >
使用的基本令牌BASE64编码为:TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh
基本令牌BASE64解码:MyGitSyncUser:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a
令牌是从构建的: 在此示例中: 虚构的用户名:MyGitSyncUser 二手PAT:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a
我希望这会有所帮助!
答案 1 :(得分:2)
我在使用PAT方面取得了成功;
git clone https://<domain>.visualstudio.com/<domain>/_git/<domain>
git clone https://<PAT>@<domain>.visualstudio.com/<domain>/_git/<domain>
应输入用户名或密码,因为PAT足够。
答案 2 :(得分:1)
确保您是贡献者组的成员,并且您的权限不受限于天蓝色仓库中的用户或组。
Azure 参与者组默认具有克隆,获取和浏览存储库内容的权限;还可以创建,评论,投票并为拉取请求做出贡献。
Project Administrator Group的成员或将管理许可权设置为“ here”所述的“允许Git存储库”的成员都可以编辑此许可权。
如果您的组或用户没有克隆存储库的权限,您将获得问题描述的行为。
答案 3 :(得分:0)
尝试: 首先从凭据管理器中删除git凭据。 尝试生成新的个人访问令牌来解决此错误
转到安全->个人访问令牌->添加 输入描述,选择所有作用域,然后单击创建令牌。
复制令牌并存储以备后用。现在可以使用此令牌代替git用户的密码。
答案 4 :(得分:0)
这是curl 7.61.0中的已知回归,它随Ubuntu 18.10一起提供。回归已在curl 7.61.1中修复,但Ubuntu 18.10尚无此修复程序。查看(并投票)https://bugs.launchpad.net/ubuntu/+source/curl/+bug/1805203
答案 5 :(得分:0)
我遇到了同样的问题,仅使用HTTPS即可解决。
我发现我只需要使用终端,而不必使用dev.azure提供的任何“ GUI快捷方式”,因为它们是用于git-credential-manager的,它在Windows上可以正常运行,但对于Ubuntu却不可用。 >
显然,dev.azure git存储库具有不同的凭据(您需要设置)而不是Microsoft帐户凭据。
假设我的Microsoft帐户用户名为johndoe@outlook.com,密码为Jd1986
如果您尝试进行git克隆,则此凭据将不起作用,因为您需要为您的项目生成git凭据,然后使用它。
转到您的终端,并使用git clone的HTTP URL并输入给定的凭据。这对我有用。
答案 6 :(得分:0)
Git http.extraheader&bearer
YAML样式管道可以使用预设变量System.AccessToken。在检查管道开头的正式“ Checkout ...”步骤之后,我发现此步骤可以在脚本中使用:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone --depth 1 https://my-org@dev.azure.com/my-org/my-proj/_git/my-repo'
请注意,Azure DevOps job authorization scope可能会对此造成影响
答案 7 :(得分:0)
这个official guide procedure对我有用,但有一点很重要。在对base64进行编码时,必须注意不可打印的字符。
指南说:
MY_PAT=yourPAT # replace "yourPAT" with your actual PAT
B64_PAT=$(printf ":$MY_PAT" | base64)
git -c http.extraHeader="Authorization: Basic ${B64_PAT}" clone
https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName
使用“ echo”而不是“ printf”会插入换行符,更改base64字符串(可能也可以与“ echo -n”一起使用,但我没有尝试过)。 另外,按照上面的代码段,不要包含用户名。
在Ubuntu 18.04上使用git 2.17.1。
答案 8 :(得分:-1)
您需要对令牌进行Base64编码,并将其添加为HTTP授权标头。这可以通过OpenSSL完成:
PAT="enter-your-pat-here"
REPO_URL="https://myorg@dev.azure.com/myorg/myproject/_git/myrepo"
AUTH=$(echo -n ":$PAT" | openssl base64 | tr -d '\n')
git -c http.$REPO_URL.extraHeader="Authorization: Basic $AUTH" clone $REPO_URL
echo -n "..." | ... | tr -d '\n'
是一种常见的Linux技巧,用于将字符串作为输入发送到通常需要用户输入的命令(尝试编写openssl base64
,您将看到)。
请注意echo -n ":$PAT"
中的前导“:”。这是因为缺少“用户”的常规格式为“用户:令牌”。
为避免在每个git命令中重新键入配置选项,您可以将授权标头添加到本地或全局git配置中:
git config --global http.$REPO_URL.extraHeader "Authorization: Basic $AUTH"
通过以下方式查看更改:
git config --global --edit