在git push命令中使用的用户名和密码

155

可以使用命令在克隆Git存储库时指定用户名和密码。例如:

git clone https://username:password@myrepository.biz/file.git

那么在推送时是否也可以指定用户名和密码呢?这样,运行git push origin --all将直接输出要求输入密码。我想在一个命令中完成此操作。

(我知道可以设置密钥等其他解决方案,但我想知道是否有一种方法只需使用一个命令来继续使用用户名和密码。)我在Windows 8.1上运行Git Bash。


你找到了关于 git commit 的解决方案吗? - Nam Vu
9个回答

204

是的,你可以这样做:

git push https://username:password@myrepository.biz/file.git --all

在这种情况下,https://username:password@myrepository.biz/file.git 会替换 git push origin --all 中的 origin

要查看更多有关 git push 的选项,请尝试 git help push


17
请注意,这将会以明文形式将用户名和密码存储在 git 配置中。 - poke
5
可以使用密码哈希代替简单密码。 - Vasiliy vvscode Vanchuk
2
@VasiliyVanchuk 你使用什么类型的哈希?这对Github有效吗? - Raphi
30
如果密码包含 @ 字符,会发生什么? - Rahul Sharma
4
建议使用 ' ' 包含完整路径,例如: git push 'https://username:password@myrepository.biz/file.git' - AlikElzin-kilaka
显示剩余9条评论

47

你甚至可以使用WebUtility.UrlEncode(password)来获取那个%40。 - pradeepradyumna
1
对于 PHP 用户,请使用 urlencode($password),这将编码所有特殊字符,而不仅仅是 @ - shyammakwana.me
不安全。如果有人截取并解密您发送的消息,他将获得您的凭据...请使用SSH密钥对... - 71GA
2021年8月13日,密码认证支持已被移除。 请参阅https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls,了解当前推荐的身份验证模式。 - Narek Tootikian

29

如果您在使用具有特殊字符的密码时遇到问题,只需省略密码,它将提示您输入:

git push https://YOUR_GIT_USERNAME@github.com/YOUR_GIT_USERNAME/yourGitFileName.git

3
看起来你的回答是整个网络上唯一直接说明如何仅提供用户名的答案。 - shuhalo
@PreetSangha,你把YOUR_GIT_USERNAME改成了你的用户名了吗?如果你不使用github.com,你把它改成了其他什么东西了吗?你把yourGitFileName.git改成了其他什么东西了吗? - TheTechRobo the Nerd
@TheTechRobo36414519 对于我的评论表示歉意。这是由另一个权限问题引起的。 - Preet Sangha
它没有提示。 请参阅https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls,了解当前推荐的身份验证模式的信息。 密码身份验证支持已于2021年8月13日停用。 - Narek Tootikian
2023仍然像魔法一样运行良好! - Mike Victoria

10

2021年8月13日停用了密码身份验证,您可以使用个人访问令牌来代替。例如以下推送命令:

git push https://<User Name>:<Token>@github.com/<User Name>/<Your Repository>.git

如何创建访问令牌的链接


使用以下命令进行克隆: git clone https://<用户名>:<令牌>@github.com/<仓库所有者用户名>/<你的仓库>.git - Mohammad Momtaz
不推荐使用该方法。请改用 Git 凭据管理器。 https://github.com/GitCredentialManager/git-credential-manager/tree/v2.0.785 - Narek Tootikian

3
根据Git文档,git push命令的最后一个参数可以是您想要推送到的存储库。请参考Git文档
    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

repository 参数可以是一个 URL 或远程名称。

因此,您可以像在 clone 命令示例中一样指定用户名和密码。


2
这似乎是合适的,但当我将带有用户名和密码参数的git repo添加进去时,就像例子一样,它仍然提示输入密码。 - Jake

3

在git 2.9.3之前(2016年8月),git push会打印用于将代码推送回克隆库的完整url。
其中包含您的用户名和密码!

不再如此: 参见提交68f3c07 (2016年7月20日)和提交882d49c (2016年7月14日),由Jeff King (peff)进行。
(由Junio C Hamano -- gitster --合并于提交71076e1,2016年8月8日)

push: 在状态输出中匿名化URL

提交 47abd85(获取:在存储之前从URL中删除用户名,2009-04-17,Git 1.6.4)教授了fetch如何匿名化URL。
主要目的是避免将密码粘贴到合并提交消息中,但副作用是我们也避免将它们打印到stderr中。

推送方面没有合并提交问题,但最好也避免将它们打印到stderr中。我们可以重用相同的匿名化函数。

请注意,为了出现这种情况,凭据必须出现在命令行或git配置文件中,这两者都不是特别安全的。
因此,人们应该切换到使用凭证助手,这样就可以解决这个问题。

但这并不是不改善那些由于某种原因需要使用嵌入式URL凭证的人的情况的借口。


2

如果您使用此类URL,Git将不会存储密码。相反,它只会存储用户名,因此下一次仅需提示输入密码。如手册中所解释的那样,要存储密码,您应该使用外部的凭证助手。对于Windows系统,您可以使用Git的Windows凭证存储库。该助手还包括在GitHub for Windows中。

使用它时,您的密码将自动被记住,因此您只需要输入一次。因此,当您克隆时,需要输入密码,然后与远程进行的每次通信都不会再提示输入密码。相反,凭证助手将向Git提供验证信息。

当然,这仅适用于通过https进行身份验证;对于ssh访问(git@host.com/repository.git),您需要使用SSH密钥,并且可以使用ssh-agent(或者如果您正在使用plink,则使用PuTTY的pageant)来记住这些密钥。


4
我知道可以设置密钥等其他解决方案,但我想知道是否有一种方法只使用一个命令来继续使用用户名和密码。 - Marvin
@Marvin,我知道你的评论,但是我不想只提交一个两句话的答案,所以我包含了其他用户可能感兴趣的信息,而不仅仅是通过HTTPS连接。 - poke
5
尽管如此,它仍没有回答他的问题。 - Marvin

0

6.5年后,多因素认证几乎无处不在,您可能会使用令牌。对于Github,请参见创建个人访问令牌


0

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