【问题标题】:Git Windows Disable password prompt UI but get password prompt from shellGit Windows 禁用密码提示 UI,但从 shell 获取密码提示
【发布时间】:2016-03-27 13:39:57
【问题描述】:

在 Windows 的 git bash 中,用户名和/或密码在单独的 UI 弹出提示中询问,如下所示。

点击取消后,您会看到以下基于 shell 的提示,其中可以输入相同的用户名。

有没有办法可以禁用这些提示? 我仍然想输入我的用户名和密码,但是我想通过基于 shell 的提示输入,而不是基于 UI 的提示。

使用此处的建议无济于事。 How to undo git config --system core.askpass git-gui--askpass

【问题讨论】:

标签: git git-bash


【解决方案1】:

使用 ssh 代替 http/https。

您需要在本地机器上设置 ssh 密钥,将它们上传到您的 git 服务器并将 url 形式的 http:// 替换为 git://,您将不再需要使用密码。

如果您不能使用 ssh,请将其添加到您的配置中:

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

文档是here

【讨论】:

  • ssh-keys 目前不是一个选项。我特别需要通过 https 为 userid/pwd 禁用此功能
【解决方案2】:

尝试全局设置变量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 的退出属性,则不会再咨询其他助手,也不会提示用户(如果未提供凭据,则操作将失败)。

注意:使用 git config --global --unset core.askPass 取消设置 core.askPass 没有帮助。它需要像上面一样设置为true

2021 年 10 月 22 日更新:

最初的答案建议设置空字符串"",但至少在 Ubuntu 上这不起作用,文档还描述了助手应该输出true1

【讨论】:

  • 尝试使用此 { git config --global --unset core.askPass } 然后 { git clone example.com:<port>/url } 但没有提示输入密码并收到此错误 { 致命:无法创建工作树目录'repo':权限被拒绝}
  • 您是否有足够的权限在普通终端中创建目录repo?也许它在您之前的尝试中已经存在?
  • 是的.. 在 Windows 桌面上并且没有权限问题.. 当我取消设置 core.askPass 时,我根本没有收到任何密码提示.. 我相信这是导致权限问题
  • 试试git config --global core.askPass true。如果这不起作用,您可以尝试无效命令(例如 git config --global core.askPass invalid-foo.
  • 进一步了解这些设置的帮助,使用 1. git config --global core.askPass "" 或 2. git -c core.askPass="" clone 。将其设置为空字符串会给我在 shell 上的提示,就像我想要的那样。编辑您的答案以将其放入并接受。
【解决方案3】:

取消设置SSH_ASKPASS

unset SSH_ASKPASS

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

调查

The gitcredentials docs 链接在其他答案中列出了 git 将检查以确定如何要求输入密码的多个位置。我依次调查了每一个:

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

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

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

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

【讨论】:

  • 我必须将它添加到 .profile 看起来我的 git bash 版本在 /etc/profile.d/env.sh 中设置了 SSH_ASKPASS 并且我的 ~/.profile 没有来源我的 ~ /.bashrc(之前我已经取消设置 SSH_ASKPASS
  • 这只是取消设置 askpass,并且仅在 repo 中没有子模块时才有效,如果多次询问密码,则子模块将在 git clone --recursive 上失败
  • @rivanov 这很有趣。 unset SSH_ASKPASS 应该使 git 在 CLI 上独占其内置密码机制。如果执行此操作失败,git 通常如何处理带有git clone --recursive 的子模块?
【解决方案4】:

你可以试试下面的配置:

git config --global --unset credential.helper

git config --system --unset credential.helper

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

【讨论】:

    【解决方案5】:

    就我而言,我已经使用 git 1.9.5 3 年了。 最近我尝试安装最新版本 2.15.0。 在最新的 git bash 中,当我执行 git pull 时,它要求我输入密码,而在旧的 git 版本(1.9.5)中,它不会问这样的问题。

    我确实在谷歌搜索过。最后我的朋友帮我解决了这个问题。 这是因为我配置了 dsa 密钥而不是 rsa 密钥。 据我了解,dsa 是旧的密钥格式,而 rsa 是新的密钥格式。

    要使用带有旧 dsa 密钥的最新 git bash,我做了以下事情, 在您的 .ssh 文件夹中创建一个名为“config”(它是全名)的文件。 在该文件中给出以下注释,

    PubkeyAcceptedKeyTypes=+ssh-dss

    然后保存。

    现在打开最新的 git bash。并做 git pull。它不会询问任何密码,只需拉取提交即可。

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 2018-11-29
      • 2012-04-16
      • 2012-10-07
      • 2013-07-04
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多