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

Posted

技术标签:

【中文标题】git push 命令中的用户名和密码【英文标题】:Username and password in command for git push 【发布时间】:2015-06-28 20:44:07 【问题描述】:

可以克隆一个 git 存储库,在命令中指定用户名和密码。示例:

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

是否可以在推送时同时指定用户名和密码?因此,例如,运行git push origin --all 将输出询问密码。我想要一个命令。

(我知道设置密钥和其他解决方案的能力,但我想知道是否有办法通过一个命令继续使用用户名和密码。)我在 Windows 8.1 上运行 Git Bash。

【问题讨论】:

你找到git commit的解决方案了吗? 【参考方案1】:

是的,你可以这样做

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

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

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

【讨论】:

请注意,这会将用户名和密码以明文形式存储在 git 配置中。 你可以使用密码散列代替普通密码 @VasiliyVanchuk 你使用什么样的哈希?这对 Github 有用吗? 如果密码中包含@ 会怎样? 推荐用' '包围完整路径,例如:git push 'https://username:password@myrepository.biz/file.git'【参考方案2】:

我使用了以下格式

git push @987654321@ --all

如果您的密码或用户名包含 @ 替换为 %40

【讨论】:

你甚至可以使用 WebUtility.UrlEncode(password) 来获取 %40 php 用户使用这个urlencode($password) 这将编码所有特殊字符,而不仅仅是@【参考方案3】:

对于任何对带有特殊字符的密码有疑问的人,只需省略密码,它就会提示您输入密码:

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

【讨论】:

似乎您的答案是整个网络上唯一一个直接说明如何只提供用户名的答案。 @PreetSangha 您是否将YOUR_GIT_USERNAME 更改为您的用户名,如果您不使用github.com,您是否将其更改为其他名称?你把 yourGitFileName.git 改成别的了吗? @TheTechRobo36414519 抱歉我的评论。这是由另一个权限问题引起的。【参考方案4】:

根据Git documentation,git push命令的最后一个参数可以是你要推送到的仓库:

    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 命令示例中一样指定用户名和密码。

【讨论】:

这似乎很合适,但是当我添加带有用户名和密码作为参数的git repo时,例如,它仍然提示输入密码。【参考方案5】:

这是可能的,但在 git 2.9.3(2016 年 8 月)之前,git push 将打印推回克隆的 repo 时使用的完整 url。 这将包括您的用户名和密码!

但仅此而已:参见commit 68f3c07(2016 年 7 月 20 日)和 commit 882d49c(2016 年 7 月 14 日)Jeff King (peff)。(由 Junio C Hamano -- gitster -- 合并于 commit 71076e1,8 月 8 日2016)

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

Commit 47abd85 (fetch: Strip usernames from url's before storing them, 2009-04-17, Git 1.6.4) 教 fetch 匿名 URL。 主要目的是避免在合并提交消息中粘贴密码,但作为副作用,我们也避免将密码打印到 stderr。

推送端没有合并提交问题,但它可能应该避免将它们打印到标准错误。我们可以重复使用相同的匿名函数。

请注意,要出现这种情况,凭据必须出现在命令行或 git 配置文件中,这两者都不是特别安全。 所以人们应该改用凭证助手,这 使这个问题消失。

但这并不是不改善那些出于某种原因最终使用嵌入在 URL 中的凭据的人的情况的借口。

【讨论】:

【参考方案6】:

当你使用这样的 URL 时,Git 不会存储密码。相反,它只会存储用户名,因此下次只需要提示您输入密码。如manual 中所述,要存储密码,您应该使用外部凭据帮助程序。对于 Windows,您可以使用 Windows Credential Store for Git。默认情况下,此助手也包含在 GitHub for Windows 中。

使用时会自动记住您的密码,只需输入一次。因此,当您克隆时,系统会要求您输入密码,然后每次与遥控器的进一步通信都不会再次提示您输入密码。相反,凭证助手将为 Git 提供身份验证。

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

【讨论】:

“我知道设置密钥和其他解决方案的能力,但我想知道是否有办法在一个命令中继续使用用户名和密码。” @Marvin 我知道这句话,但是我不只是想提交一个两句话的答案,所以我为其他可能不只是对通过 HTTPS 连接感兴趣的用户提供了信息. 不过,它仍然没有回答他的问题。【参考方案7】:

6.5 年后,多因素授权几乎无处不在,您可能会使用令牌。 github见Creating a personal access token

【讨论】:

以上是关于git push 命令中的用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章

git push 不用输入用户名和密码

git 解决每次push代码都要输入用户名密码和git token失效的问题

git学习 7 git每次push都输入用户名 密码

git push 缓存密码和用户名

git-push 需要输入用户名和密码,原因分析及解决

Git Push 避免用户名和密码方法