让 Git 在需要密码时失败,而不是提示输入密码

4

我正在开发一个应用程序,用户可以输入Git存储库,然后将其克隆到本地计算机。在某些情况下(例如Github上指向不存在仓库的URL输错了),Git客户端会提示用户输入用户名和密码。我不想要这种行为 - 我只希望Git以非零错误状态失败。非交互式错误消息是可以接受的,我只想避免密码提示导致我的应用程序挂起。

我该如何实现这一点?

2个回答

7
您可以设置 GIT_TERMINAL_PROMPT 环境变量为 0,这样就不会提示您输入任何内容了。
>>> git clone https://github.com/private/private.git 
Cloning into 'private'...
Username for 'https://github.com':
>>> GIT_TERMINAL_PROMPT=0 git clone https://github.com/private/private.git
Cloning into 'private'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled

或者可以设置 GIT_ASKPASS 环境变量core.askpass 配置值true(或一个空的脚本)。

>>> git clone https://github.com/private/private.git 
Cloning into 'private'...
Username for 'https://github.com':
>>> GIT_ASKPASS=true git clone https://github.com/private/private.git
Cloning into 'private'...
remote: Repository not found.
fatal: Authentication failed for 'https://github.com/private/private.git/'

两种解决方案都有非零的退出代码。


2
false(1)通常是用于“什么都不做,而且做得很失败”的目的。不需要一个空脚本。 - gspr
有趣。如果没有这样的“真正”的二进制文件,是否有跨平台的替代方案?或者我必须将这样的程序与我的脚本一起发布吗? - shadowtalker
@shadowtalker:我相信 true(1) 和 false(1) 是由 POSIX 强制规定的,因此它们已经非常跨平台了。或者至少可以期望一个能够执行空脚本的 shell 一样可移植 :) - gspr
@shadowtalker 我刚刚注意到GIT_TERMINAL_PROMPT环境变量,这可能是一个更优雅的解决方案。 - D Malan
我完全无法让这个工作。我正在通过SSH克隆,但它仍然要求输入密码!我尝试了多种值,包括core.askPasscredential.helperGIT_ASKPASSSSH_ASKPASSGIT_TERMINAL_PROMPT,但都没有效果。我找到的唯一有帮助的东西GIT_SSH_COMMAND="ssh -o PasswordAuthentication=no" - iliis
GIT_ASKPASS=false 对我不起作用 - undefined

1
除了使用 GIT_TERMINAL_PROMPT=0,下面的方法也可以防止凭据管理器窗口弹出: git -c credential.helper= <其余指令>

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