使用OAuth访问令牌进行GitHub克隆

250

在一个脚本中,我正在尝试使用OAuth令牌克隆GitHub存储库。

根据这个教程:

https://github.com/blog/1270-easier-builds-and-deployments-using-git-over-https-and-oauth

我应该能够构建如下命令:

git clone https://<token>@github.com/owner/repo.git

如果我手动使用正确的访问令牌尝试这个操作,它仍然要求我输入密码。

如果我在命令行上尝试,我只会得到一个“找不到存储库”的错误。

这篇文章是2012年的,我找不到任何关于这方面的API文档。所以我想知道这是否仍然有效。


1
“如果我手动尝试”和“如果我在命令行上尝试”有什么区别? - Sebastian Mach
请修正URI-token语法,参见https://dev59.com/k18e5IYBdhLWcg3wwMhW#29570677。 - Peter Krauss
@PeterKrauss 引用一个无关的主题似乎有点不必要,特别是如果它是一个“关闭”的话题。 - deiga
请查看底部的答案! - Robert Moskal
13个回答

299

只需使用HTTPS地址以用户的身份克隆密钥,所以:

git clone https://oauth-key-goes-here@github.com/username/repo.git
或者
git clone https://username:token@github.com/username/repo.git

3
您可以使用 Github 个人访问令牌替换 OAuth 密钥来运行此命令。 - Aung Htet
36
以前我使用传统的个人访问令牌时一切正常,但从10月18日起,GitHub也发布了细粒度的个人访问令牌,看起来对于它们来说,您必须使用git clone https://oauth2: 。<oauth-key-goes-here>@github.com/username/repo.git`</oauth-key-goes-here> - Andy
哇。我不知道这到底是如何在像Composer这样的包管理器中工作的,其中存储库信息是在纯文本JSON中配置的。我无法相信Github没有提供一种通过COMPOSER_AUTH环境变量来离散传递密钥的方法……这有点破坏组织服务用户使用情况的目的。 - Luke A. Leber
2
使用 …username:token… 的方法同样适用于Gitlab! - Hi-Angel
我仍然可以在没有oauth2:的情况下使用细粒度的PAT。 - undefined

119

结果是作用域问题。我当然需要完整的repo作用域,因为我试图克隆一个private仓库。

遗憾的是 Github 没有更明确的错误信息来解释这些问题,但从安全角度考虑,我可以理解为什么会这样。

对于任何试图找出类似问题的人,我建议创建一个拥有完整访问权限的个人访问令牌:

设置 > 开发者设置 > 个人访问令牌 > 生成新令牌

这样,您就可以轻松测试是否存在作用域问题,通过将您的令牌与拥有所有访问权限的个人访问令牌进行比较。

感谢任何仍花时间阅读此内容的人。


2
请注意,如果您仅尝试通过浏览器访问存储库页面,则仍将面临404未找到页面。但在我的情况下,克隆工作正常。 - Herick
我在授权请求中提供了“用户存储库”的范围,但在请求访问令牌时,它总是返回scope=(空范围)。为什么会这样? - user187676
似乎没有办法避免使用Github安全令牌进行写访问,这对于需要仅克隆私有存储库的脚本和其他集成来说是一种安全限制 :( - matanster

66

只需使用 HTTP 克隆存储库:

git clone https://github.com/myuser/myrepo.git

在提示输入用户名时,请填写您的用户名。

在提示输入密码时,请填写令牌而不是密码。


19
不是答案,问题在于“如何使用令牌”,请参考 https://dev59.com/k18e5IYBdhLWcg3wwMhW#29570677。 - Peter Krauss
1
您可以在URL中使用令牌,如https://oauth-key-goes-here@github.com/username/repo.git。 - Andris
1
嗯...对GitHub也起作用了... 我猜它应该被使用... 就像每个URL都有一个appPassword一样 无论如何谢谢 - ronit
3
值得一提的是,您可以在任何 git 命令行操作中使用个人令牌代替密码,而不仅仅是克隆。 - Augusto
1
找到了一个错误 => 远程: 仓库未找到 - satendra singh

47

请试一试。

git clone `https://oauth2:TOKEN@github.com/username/repo.git`
例如,git clone https://oauth2:ghp_...Gnm61dm4rh@github.com/gituser/testrepo.git


3
正常运作,请仔细检查URL链接。@github.com/gituser/testrepo.git - hobbydev
4
这比手动输入用户名和密码好多了!我可以保存 GitHub 访问令牌变量,使用脚本 git clone https://oauth:$GITHUB_TOKEN@github.com/user/repo.git 或只是将令牌本身添加到脚本中。这个答案被低估了。 - JakeAve
使用组织仓库时,出现“远程:无效的用户名或密码”错误 :( git clone https://oauth2:$GITHUB_TOKEN@github.com/MyOrg/repo.git - A Kingscote
@AKingscote,请检查您的密钥是否正确且未过期。 - hobbydev
ghp开头的令牌似乎不是一个新的细粒度令牌,ghp是用于经典令牌的,它易于使用,但一些组织出于安全考虑禁用了它。新的细粒度令牌以github_pat_开头,即使对于git clone,我使用起来也很困难。 - undefined

31

从以下两个选项中选择适合您的方法

在终端中执行

$ git clone 您的仓库URL Username:your_token Password:

... 这里没有密码

在git客户端应用程序中执行

例如Sourcetree、GitKraken和GitHub客户端。

输入您的repo_url(显然不包括“$ git clone”部分)

用户名:your_token 密码:

... 这里没有密码

或者 例如,在Sourcetree中,打开“首选项”,然后转到“高级”,输入主机名(即www.x.com)和用户名(即your_token)

输入图像描述


在Windows上,使用令牌作为用户名对我有效。 - John
我不得不使用我的真实用户名作为用户名,令牌作为密码,而不是现在的用户名,可能最初它有一些多余的空格,或者需要一点时间,当令牌激活时发生。 - FantomX1

23

请前往https://github.com/settings/tokens生成一个新的token,记得启用对仓库的访问权限,之后您就可以按照以下步骤克隆仓库。

git clone https://<token>@github.com/owner/repo.git
注意:如果这是您的存储库,则所有者是您的用户名,否则请保留存储库所有者的用户名(具有存储库所有权限的用户名)。

远程:找不到仓库 - satendra singh
1
这对我有效。我有一个对话框,关闭后唯一的方法是将令牌放在URL中。谢谢。 - Laura Liparulo
4
以前我使用传统的个人访问令牌时一切正常,但从10月18日起,GitHub还发布了细粒度的个人访问令牌,看起来对于它们,您必须使用git clone https://oauth2: 。<token>@github.com/owner/repo.git`</token> - Andy

4

对于像我这样懒惰的未来人:

  1. https://github.com/settings/tokens生成您的“个人访问令牌(经典)”,并将其复制。 (这将在下一步中像密码一样运行。)

  2. 运行以下git命令。 它会向git发出信号,以存储凭据(这将在第3步中使用)

    git config --global credential.helper manager-core
    git config --global credential.helper store
    
  3. 在您的第一个克隆中,将要求您输入用户名和密码提供来自上述项目1的密码

    git clone https://github.com/GithubUserName/repo-to-clone.git
    

对于接下来的git命令,您不应该被要求输入凭据。


1
请注意,manager-core 应该是 从 Git 2.39+ 开始,改为 manager(不再是 manager-core。而且你的第二个 git config --global credential.helper 命令会覆盖你的第一个命令。 - VonC
1
我无法感谢过去的自己。这个答案在过去一个月内仅有4次被使用。 (我设置了4台不同的云服务器,每次我都来到这里做这件事。谢谢过去的我,我爱你!) - Mehmet Kaplan
嘿,过去的我!你真棒。我是认真的,你就是那个人! - undefined

3

针对那些在使用只读 FG 令牌时遇到“无法克隆私有存储库:拒绝写入访问权限”问题的人,以下是解决方法:

这个错误信息有点误导。在我遇到的情况下,问题出在配置上:

  1. 创建一个只读令牌(内容为:readonly)
  2. 确保资源所有者已正确设置。
  3. 对于组织,您需要完成“personal-access-tokens-onboarding”。
  4. 使用 https://oauth2:$TOKEN@github.com/myuser/myrepo.git 克隆存储库(请注意用户名,正如其他人建议的一样,它是 oauth2

通过以上所有步骤,我成功地用只读令牌克隆了私有存储库(并且没有写入访问权限)。


2

2
从2023年春季开始,如果您的访问令牌范围设置正确,这是一个用于克隆存储库的一行代码(无需进一步交互)。
git clone https://ghp_foo_etc:x-oauth-basic@github.com/bar/baz-phoenix.git

ghp_foo_etc 是你的访问令牌。就是这样!这与 npm 访问私有存储库中的代码类似。无需提供用户名。

我非常确定一直都是这样的!


为什么有这么多种方法可以做这个?可选的oauth2:,现在先是令牌。有没有关于这个的文档? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接