如果我在~/.gitconfig
中设置了凭据帮助器,如何在特定仓库中禁用/绕过它并使用否凭证助手?
我已尝试编辑repo的.git/config
文件以清空credential.helper
属性,如下所示:
[credential]
helper =
...但是当我执行git push
时,我收到以下错误消息,Git仍使用~/.gitconfig
中的默认凭据帮助程序:
git: 'credential-' is not a git command. See 'git --help'.
Did you mean this?
credential
我正在使用git版本1.7.12。
(Backstory /用例:Git配置为使用store
帮助程序,它将未加密的密码存储在磁盘上。cache
帮助程序在此系统上不可用。我有几个存储库用于我每次都要输入密码,而不是将其保存在磁盘上。)
答案 0 :(得分:29)
使用git 2.9(2016年6月),这个(helper =
)实际上会有效!
commit 2432137见Jeff King (peff
)(2016年2月26日)
(由Junio C Hamano -- gitster
--合并于commit 1b68962,2016年4月3日)
credential.helper
配置变量是累积的,没有好办法从命令行覆盖它 作为特殊情况,给出一个空字符串作为其值现在用作清除各种文件中指定值的信号。
credential
:让空凭据规范重置帮助列表由于
credential.helper
键是一个多值配置列表,因此一旦设置好帮助器就无法“取消设置”。因此,如果您的系统/etc/gitconfig
设置了一个,那么您永远无法避免运行它,而只会在顶部添加您自己的帮助程序。由于
credential.helper
的空值是无意义的(它只是尝试运行“git-credential-
”),我们可以假设没有人使用它。让我们定义它来重置帮助程序列表,让你覆盖较低优先级的实例 来过。
答案 1 :(得分:16)
我尝试过并且运作良好的是:
$ git config --system --unset credential.helper
但为了工作正常,我必须设置具有管理员权限的git-bash.exe。
不幸的是,我认为这是一个全局变量。您应该测试并查看它是否适用于单个存储库。
祝你好运答案 2 :(得分:15)
设置为空字符串的配置变量与未设置的变量不同。如果已在.git/config
中设置变量,则无法在~/.gitconfig
中强制取消设置。
此外,credential.helper
是使用多个值的变量之一,在这种情况下,值将从所有读取配置文件中聚合。
所以基本上你的选择似乎是:
请勿在{{1}}中使用credential.helper
;通过指定repo URL,仅在~/.gitconfig
或.git/config
中为您需要的存储库设置商店助手,例如。
~/.gitconfig
或实现您自己的帮助程序,它对一组已配置的存储库不执行任何操作,并在其余部分委托给[credential "https://specific.example.com/repo.git"]
helper = store
。
答案 3 :(得分:8)
除了git config credential.helper=
&#39;那个I mention above with Git 2.9,你现在(Git 2.13.x / Git 2。14,2017年第3季度)只能为一个命令禁用凭证助手(而不仅仅是给定回购中的任何命令)< / p>
这意味着git -c credential.helper= clone /url/remote/repo
现在有效。
&#34; git clone --config var=val
&#34;是一种填充的方式
新存储库的每个存储库配置文件,但当val为空字符串时,它无法正常工作。
这已得到修复。
commit db4eca1见Jonathan Nieder (artagnon
)(2017年5月2日)
(2017年5月16日Junio C Hamano -- gitster
-- commit 883247c合并)
中的空配置值
clone
:处理-c
&#34;
git clone --config
&#34;使用以下咒语将项目添加到配置文件,而不是替换现有值:git_config_set_multivar_gently(key, value, "^$", 0)
只要没有现有值与正则表达式
^$
匹配,它就会按预期工作并添加到配置中。但是,当值为空时,它将替换现有值。尝试在克隆期间设置
credential.helper
以使用特定帮助程序而不继承~/.gitconfig
和/etc/gitconfig
时注意到。
就是这样,我跑了:git clone -c credential.helper= \ -c credential.helper=myhelper \ https://example.com/repo
打算产生配置:
[credential] helper = helper = myhelper
如果没有此补丁,&#39;
helper =
&#39;不包括该行,并使用来自/etc/gitconfig
的凭据帮助程序。
请注意,使用commit 515360f时,文档更加清晰:
凭证doc:使多辅助行为更加突出
Git的配置系统通过按顺序读取多个配置文件来工作,从一般到特定:
/etc/gitconfig
~/.gitconfig
或~/.config/git/config
).git/config
)对于单值配置项,最新值获胜 对于多值配置项,值按此顺序累积。
例如,这允许在
~/.gitconfig
中全局设置凭证帮助程序git将尝试在所有存储库中使用,无论它们是否另外提供另一个帮助程序。
这通常是一件好事 - 例如我可以安装帮助程序来使用我的操作系统密钥链,并在全球范围内短时间缓存凭据。有时人们希望能够覆盖继承的设置 对于
credential.helper
设置,可以通过在为其提供新值之前将配置项设置为空来完成此操作。
答案 4 :(得分:0)
我也遇到了这个问题,因为当我想测试一个新的credential.helper时,它总是在执行。这是在macOS上使用Apple开发工具随附的git。
使用git config --list
列出配置会显示两个助手。
运行git config --global --edit
没有显示第一个帮助程序的设置。有点奇怪的是,配置助手时的--global与编辑配置时的--global的作用域不同。
此外,由于我想添加其他帮助程序,因此仅将其清除将无法解决该问题。
最后在两个地方找到该设置:
/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig
/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig
从第一个凭证中删除了凭证部分,但是仍然使用--list
列出了两个设置。重新启动并尝试所有未设置,全部设置--system,-global等组合后,我找到了第二个文件。
从该文件中删除了该设置(同样只有一个),最后--list
不显示配置的任何帮助程序。