克隆私有仓库(Github)

445

我在Github上有一个私有仓库,用于我正在开发的项目。目前为止,我只在家里的台式电脑上工作,但我刚刚买了一台笔记本电脑,并尝试设置它,以便我可以从任何一台计算机上工作,并推送/拉取更改。

我在Github帐户中添加了新的SSH密钥,成功地克隆并对我设置的公共测试repo进行更改。但是,我无法克隆私有repo。我需要在命令行中做些特殊设置才能克隆私有repo吗?我需要为我的笔记本电脑设置一个新的GitHub帐户并将自己设置为合作者吗?

我使用的命令是git clone git://github.com/username/reponame.git


由于某些原因,2022年4月的更新答案对我不起作用。这里提供的答案(https://dev59.com/X8Lra4cB1Zd3GeqPBRJl)对我有用 - git clone https://username:token@github.com/user/repo - desert_ranger
32个回答

340

2022年4月更新:

如果你是私人仓库的所有者或成员,你可以从你的账户克隆私人仓库,同时也可以从组织中克隆私人仓库。*pat是个人访问令牌(PAT)。

git clone https://<pat>@github.com/<your account or organization>/<repo>.git

为了克隆您的账户或组织中的私有仓库,您需要在Github账户上生成一个PAT(个人访问令牌),并将其添加到上述命令中。 * 组织没有 PAT生成器。

以下是如何在Github账户上生成PAT:

1,进入"设置"

enter image description here

2,向下滚动,然后进入"开发者设置"

enter image description here

3,点击"个人访问令牌",然后点击"生成新令牌"

enter image description here

4,填写"备注",然后勾选"repo"

*如果"repo"未被勾选,则无法克隆私有仓库。

enter image description here

5,向下滚动,然后点击"生成令牌"

enter image description here

6,最后,会生成一个PAT

enter image description here

这是使用上述生成的PAT的命令

git clone https://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@github.com/<your account or organization>/<repo>.git

4
太好了!它完美地运作了,但我仍然不知道为什么我不能使用Sourcetree/Xcode克隆我的私有代码库(其他代码库可以)。 - zzmasoud
5
早上整个时间我都被卡住了。谢谢你。截至2022年,这应该是唯一可接受的答案。 - Hank Chan
2
经过尝试了那么多方法,这个对我真的很有效! - Zain Ul Abiden Iftikhar
1
这对我有用,但当我尝试 git pull 时仍然遇到相同的问题。如何从私有仓库拉取? - domdrag
4
尝试过这个方法,但它仍然要求输入密码,而我的密码无法通过验证。如果我将其设置为公共的,则可以正常工作。问题是关于Github中的私有存储库,因此我认为缺少了一些信息。 - chriskelly
显示剩余7条评论

291
这个方法对我很有效:
使用以下命令克隆GitHub上的代码库:git clone https://username@github.com/username/repo_name

13
谢谢您。但我不知道为什么这样做有效。我从未提示输入密码。通过 HTTPS 进行 git 克隆是否会涉及我的 SSH 密钥?我原以为不会。 - reinhardt
1
很好,它让我能够在Ubuntu上下载私有仓库。 - The Onin
2
@diimdeep Git和其他工具通常使用git:协议来访问远程存储库中的文件。一些防火墙配置会阻止git:// URL,这会导致在尝试克隆存储库或下载依赖项时出现错误。(例如,企业防火墙因阻止git:而“臭名昭著”。)如果遇到此问题,您可以通过运行以下命令强制使用https::git config --global url."https://".insteadOf git:// - charlchad
4
在某些情况下,如果你被要求输入密码但是被拒绝访问,可能是因为你需要提供一个“个人访问令牌”而不是你的GitHub登录密码。[1] [2] - David Winiecki
2
答案是错误的,SSH密钥与HTTP访问无关。 - Pavel Šimerda
显示剩余5条评论

246

私有克隆URL的格式为git@github.com:username/repo.git - 也许您需要使用git@而不是git://

git:// URL是只读的,看起来私有存储库不允许此形式的访问。


是的——使用“git@github.com:”而不是“https://”解决了我的问题!实际上,我同时启用了2FA,但那与此无关。 - leo

161

我遇到过这个问题多次,每次都会着陆在这个页面上,尝试了所有方法但都失败了!

这是因为我启用了双重身份验证(2FA)!!!

根据 https://help.github.com/articles/which-remote-url-should-i-use/#when-2fa-is-enabled

如果您已启用双重身份验证,或者正在访问使用SAML单点登录的组织,则必须 提供个人访问令牌而不是输入HTTPS Git的密码。

  1. 点击此链接创建一个访问令牌
  2. git clone https://github.com/username/repo_name.git(默认 git repo 链接已足够!)
  3. 输入您的用户名并将访问令牌用作密码!!

更新:

  • 如果您不介意在命令行中公开访问令牌,也可以将访问令牌粘贴为用户名,然后按enter enter (无需输入密码)。
  • 厌倦了一遍又一遍地复制和粘贴访问令牌?
    使用 git config credential.helper store (请勿在您不信任的机器上执行此操作)

如果您使用的是Windows操作系统,您可以安装https://github.com/microsoft/Git-Credential-Manager-for-Windows。然后,在克隆私有存储库时,会出现带有Github登录的UI窗口。它还可以让您填写2FA代码。您的Github凭据将被安全地存储。 - Jirik
5
谢谢您的内容。另一种方法是设置URL格式,如下所示:https://username:access_token@github.com/username/repo_name.git。如果我有一个公共存储库变成了私人存储库,这对我很有帮助。我所需要做的就是将远程源更改为该格式。 - Alvin Novian
1
我无法克隆我的私有仓库。它显示未找到。 - Jason Cheng

102
这对我有用:

git clone https://username:password@github.com/username/repo_name.git

8
使用特殊字符作为密码存在问题,会将您的密码留在日志中,并且似乎已经无法使用了。 - pcnate
13
尝试这个 - 程序会提示您输入帐户密码。不用担心密码泄露到历史记录或日志中。 git clone https://username@github.com/username/repo_name.git - Vinay
4
使用密码进行身份验证将于2021年8月13日停用,并在此之后不再起作用。https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ - dylanvanw
2
如果您使用个人访问令牌,这仍将起作用,并且可以轻松地编写脚本以提示输入令牌(read -s)。 - Milliron X

38

2023年更好的解决方案

使用个人访问令牌是可行的,但您可能希望将令牌访问范围缩小为您想要克隆的仓库

Github推出了细粒度个人访问令牌,可以完全做到这一点。

以下是需要遵循的步骤:

  1. 从右上角菜单中选择“设置”

输入图像描述

  1. 在随后的页面中,从左侧边栏中选择“开发者设置”

输入图像描述

  1. 然后在下一个页面中,在“个人访问令牌”下选择“细粒度令牌”

输入图像描述

  1. 然后点击“生成新令牌”按钮

输入图像描述

  1. 在下一个页面中,您将被要求给您的令牌命名并选择存储库访问权限。如果您只想指定单个存储库,请选择“仅选择存储库”,然后从下拉菜单中选择您的存储库

输入图像描述

  1. 之后,您需要在同一页面上指定存储库权限。如果您只想克隆私有存储库,则将“内容”设置为“访问:只读”

输入图像描述

最后,点击“生成令牌”按钮

获得令牌后,将其复制并运行以下命令

git clone https://oauth2:<YOUR-TOKEN-HERE>@github.com/<your_user>/<your_repo>.git

就是这样了。


在我看来,这个似乎是最好的答案。它只限制了对存储库的读取访问,并且不需要每次拉取/获取时输入访问令牌。 - Chris Schankula

34

解决方案:2022年2月

  1. 进入 设置 > 开发人员设置 > 个人访问令牌 链接: https://github.com/settings/tokens
  2. 点击 生成新令牌
  3. 选择权限范围(开启全部以获得完全访问权限)

这将生成一个类似以下的令牌:

输入图片说明这里

现在使用以下命令:

git clone https://user:TOKEN@github.com/username/repo.git

2021年更新(已过时)

已过时:尝试使用以下命令:

git clone https://user:pass@github.com:username/repo.git

以下错误将会得到解决:

自2021年8月13日起不再支持密码验证。请改用个人访问令牌。

同时将引导您前往以下支持页面:

https://docs.github.com/zh/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token



2021年解决方案(已过时)

点击您的头像并进入以下路径(使用上面的链接获取更多指导):

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


5
这似乎有所改变。"git clone https://user:TOKEN@github.com/username/repo.git" 对我来说可行。 - fred

33

对我来说,解决方案是:

git clone https://myusername@restoftherepolink.git

这里需要您是repo的所有者,但如果您不是所有者,则会出现

git clone https://myusername@github.com/ownersusername/repo_name.git

如果您启用了2FA,则:

  1. 从右上角的个人资料图标进入设置,或访问https://github.com/settings/profile
  2. 进入底部选项卡或前往https://github.com/settings/tokens
  3. 打开此处的“个人令牌”选项卡,并生成一个令牌
  4. 复制令牌并运行git clone https://myusername@restoftherepolink.git

在提示输入密码时,请将该令牌放入此处。 Token generation image here


1
如果该URI没有公共存储库,则Git会提示输入用户名/密码,因此第一个命令是正确的。 - pcnate
在第4步的2FA方法中,克隆命令中提到了主机吗? - Raghu
是的,其中 https://myusername@restoftherepolink.git 是您要克隆的存储库,设置在您自己的用户设置中可用。 - Black Mamba

23

使用Git for Windows时,使用HTTPS URL更加简单。

打开git shell,然后输入git clone https://github.com/user/repo。在提示时输入用户名和密码。无需设置SSH密钥。


1
我同意不需要设置SSH的简单性。 - Félix Adriyel Gagnon-Grenier
同意其他评论,只需在Windows或Ubuntu上使用HTTPS URL即可完美运行(已在116.04上尝试)。 - greg_data

16

众所周知克隆的过程,我想在这里补充几点。不用担心特殊字符或者写成“@”为“%40”,参见字符编码

$ git clone https://username:password@github.com/user/repo   

这行文字可以达到目的

  1. 假设我的密码中包含特殊字符(我不知道要用什么替换其中的 "@"),我该怎么办?
  2. 如果我想使用临时密码而不是我的原始密码怎么办?

为了解决这个问题,我建议使用GitHub开发者选项来生成访问令牌(Access Token)。 我相信Access Token是安全的,您不会找到任何特殊字符。

creating-a-personal-access-token(创建个人访问令牌)

现在,我将编写以下代码来访问我的存储库。

$ git clone https://username:token@github.com/user/repo

我只是用 Access-token 替换了我的原始密码,现在如果有人看到我的访问凭据,我可以随时重新生成令牌。

确保您已经勾选了完全控制私有存储库的存储库这里是快照


很好,答案在Google Colab中运行良好,但在分享.ipynb文件之前,请更改您的密码 :) - Muneeb Ahmad Khurram

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