Git Windows禁用密码提示界面但从shell获取密码提示

30
在 Git Bash for Windows 中,会弹出类似下面的单独的 UI 弹窗提示来询问用户名和/或密码。

用户名提示

如果点击“取消”,则会出现以下基于 shell 的提示,可以在其中输入相同的用户名。

基于 shell 的用户名提示

我是否有办法禁用这些提示? 我仍然希望输入我的用户名和密码,但是不想通过 UI 弹窗提示,而是想通过基于 shell 的提示输入。
使用此建议无法解决问题。 如何撤消 git config --system core.askpass git-gui--askpass

使用 unset 无法解决问题。 - Yogesh_D
6个回答

43

尝试在你的配置文件中全局设置变量core.askPass

$ git config --global core.askPass true

或者使用 -c 开关来仅覆盖一个命令的配置。

$ git -c core.askPass=true clone <https_url>

参见:https://git-scm.com/docs/gitcredentials

如果一个辅助程序输出了一个值为true或1的quit属性,那么将不会再咨询其他辅助程序,也不会提示用户(如果没有提供凭据,则操作将失败)。

注意:使用git config --global --unset core.askPass取消设置core.askPass并不起作用。它需要像上面一样被设置为true

更新于2021-10-22:

原答案建议设置为空字符串"",但在Ubuntu上至少不起作用,文档也描述了辅助程序应该输出true1


尝试使用以下命令 { git config --global --unset core.askPass } 然后再执行 { git clone https://example.com:<port>/url },但是没有提示输入密码,反而出现了如下错误信息:{ fatal: could not create work tree dir 'repo': Permission denied }。 - Yogesh_D
你在普通终端中有足够的权限创建一个名为 repo 的目录吗?也许它已经存在于你之前的尝试中了? - hinneLinks
是的..在Windows桌面上,没有权限问题..当我取消设置core.askPass时,根本不会提示输入密码..我相信这就是权限问题的原因。 - Yogesh_D
1
尝试使用 git config --global core.askPass true 命令。如果这不起作用,您可以尝试一个无效的命令(例如 git config --global core.askPass invalid-foo)。 - hinneLinks
将您的想法进一步推广,这些设置可以帮助您,可以使用以下方法之一:1. git config --global core.askPass "" 或 2. git -c core.askPass="" clone <https_url>。将其设置为空字符串会在 shell 中提示我,就像我想要的那样。编辑您的答案并接受它。 - Yogesh_D
显示剩余3条评论

2

使用ssh代替http/https。

您需要在本地机器上设置ssh密钥,将其上传到git服务器并将url从http://替换为git://,这样您就不需要再使用密码了。

如果无法使用ssh,请将以下内容添加到配置中:

[credential "https://example.com"]
    username = me

文档在这里


2
ssh密钥目前不可用。我需要特别禁用它,以便在https下使用用户名/密码。 - Yogesh_D

1
截至2022年,我在.gitconfig中使用了以下属性:
[credential]
  guiPrompt = false
  gitHubAuthModes = basic #in case of the basic (username/password) authentication

1
您可以尝试以下配置:

git config --global --unset credential.helper

并且

git config --system --unset credential.helper

我在Windows 7上使用PortableGit 64位2.12.1.1时,这对我很有帮助。


0
取消设置 SSH_ASKPASS
unset SSH_ASKPASS

要自动执行此操作,每次打开git bash时,您可以将上述行添加到您的.bashrc文件的末尾。

调查

git凭据文档中提供了其他答案链接的一些地方,列出了git将检查以确定如何请求密码。我逐个进行了调查:

env | grep GIT
git config --get core.askPass
env | grep SSH

最后一个命令告诉我SSH_ASKPASS存在:

SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass`.

这不是我的dotfiles的一部分,因此似乎来自http://git-scm.com的默认Windows git发行版。


1
我不得不将这个添加到.profile文件中。看起来我的git bash版本在/etc/profile.d/env.sh中设置了SSH_ASKPASS,而我的/.profile没有引用我的/.bashrc(我已经在一段时间前取消了SSH_ASKPASS)。 - Tim Lum
这只是取消设置askpass,仅在存储库中没有子模块的情况下才有效。如果密码被多次要求,则子模块将在“git clone --recursive”上失败。 - rivanov
@rivanov 这很有趣。unset SSH_ASKPASS 应该使 git 在 CLI 上专门使用其内置的密码机制。如果在执行此操作时失败,那么 git 通常如何处理 git clone --recursive 的子模块? - Alex Palmer

0
在我的情况下,我已经使用 git 1.9.5 三年了。 最近我尝试安装最新版本2.15.0。 在最新的git bash中,当我执行git pull时,它会要求我输入密码,而在旧版本的git(1.9.5)中不会询问任何类似的问题。
我在Google上进行了搜索。最终,我的朋友帮助我解决了这个问题。 这是因为我配置了DSA密钥而不是RSA密钥。 就我所知,DSA是旧的密钥格式,而RSA是新的密钥格式。
要使用最新的git bash和旧的DSA密钥,我做了以下的事情, 在您的.ssh文件夹内创建一个名为“config”(完整名称)的文件。 在该文件中提供以下说明,
PubkeyAcceptedKeyTypes=+ssh-dss
然后保存。
现在打开最新的git bash。并执行git pull。它不会要求任何密码,只需要拉取提交即可。

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