如果我在~/.gitconfig
中设置了一个凭证帮助程序,我如何在特定的存储库中禁用/绕过它并使用 no 凭证帮助程序?
我尝试编辑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。
(背景故事/用例:Git被配置为使用store
helper,它将密码以未加密的方式存储在磁盘上。cache
帮助程序在此系统上不可用。我有几个仓库,我宁愿每次都输入密码,而不是把它保存在磁盘上。)
5条答案
按热度按时间fcipmucu1#
在git 2.9(2016年6月)中,这个(
helper =
)可以正常工作!credential.helper
配置变量是累积的,没有好的方法从命令行覆盖它。作为一种特殊情况,给出一个空字符串作为其值,现在用作清除各种文件中指定值的信号。
参见commit 2432137(2016年2月26日),作者Jeff King (
peff
)。(由Junio C Hamano --
gitster
--合并至commit 1b68962,2016年4月3日)credential
:允许空凭据规范重置帮助程序列表由于
credential.helper
键是一个多值配置列表,因此一旦设置了helper,就没有办法“取消设置”。因此,如果您的系统/etc/gitconfig
设置了一个,您永远无法避免运行它,而只能在顶部添加您自己的帮助程序。由于
credential.helper
的空值是无意义的(它只会尝试运行“git-credential-
”),我们可以假设没有人使用它。让我们定义它来重置helper列表,让您覆盖之前出现的低优先级示例。更方便:在Git 2.26(2020年第一季度)中,此覆盖甚至适用于任何值。
参见commit 46fd7b3、commit 82eb249、commit 588c70e、commit 732f934、commit 3fa0e04(2020年2月20日)by brian m. carlson (``)。
(由Junio C Hamano --
gitster
--合并于commit 2cbb058,2020年3月5日)credential
:使用配置中最后一个匹配的用户名签字人:布赖恩·卡尔森
在代码库的其他地方,我们使用最后一个匹配的配置选项是生效的配置选项的规则。
这是有帮助的,因为它允许更具体的配置设置(例如,每存储库配置)覆盖不太具体的设置(例如,每用户配置)。
然而,在凭证代码中,我们没有荣誉此设置,而是选择了我们拥有的第一个设置,并坚持使用它。
这很可能确保我们从URL中选择了值,我们希望在配置中荣誉该值。
但是,这两种方法都是可能的,所以让我们检查该值是否是我们通过协议连接获得的值,如果存在,则将来自URL,如果是,则保留它。
否则,让我们用从配置中获得的最新版本覆盖该值,因此我们保留最后一个配置值。
注:user202729在评论中添加:
如果凭证助手
A
设置为全局,并且您希望在 * 本地 * 存储库中使用B
(* 更改 *,而不是删除助手),请用途:第一个空项删除全局设置
A
。同样,在
.git/config
中设置两条线helper =
和helper = B
。eoigrqb62#
我尝试过的,而且效果很好的是:
但为了让它正常工作,我必须设置git-bash.exe的管理员权限。
不幸的是,我认为这是一个全局变量。您应该测试并查看它是否适用于单个存储库。
祝你好运
6rqinv9w3#
除了I mention above with Git 2.9的'
git config credential.helper=
'之外,你现在(Git 2.13.x/Git 2.14,2017年第3季度)可以仅为一个 * 命令 * 禁用凭证助手(而不仅仅是给定存储库中的任何命令)这意味着
git -c credential.helper= clone /url/remote/repo
现在可以工作了。“
git clone --config var=val
“是一种填充新仓库的每仓库配置文件的方法,但是当瓦尔是空字符串时,它不能很好地工作。已修复此问题。
参见commit db4eca1(2017年5月2日),作者Jonathan Nieder (
artagnon
)。(由Junio C Hamano --
gitster
--合并于commit 883247c,2017年5月16日)clone
:处理-c
中的空配置值“
git clone --config
“使用以下命令向配置文件添加一个项,而不是替换现有值:只要没有现有值与regex
^$
匹配,就可以按预期工作并添加到配置中。但是,当值为空时,它将替换现有值。在克隆期间尝试设置
credential.helper
以使用特定的帮助程序而不从~/.gitconfig
和/etc/gitconfig
继承时注意到。那就是,我跑了:
旨在生产该配置:
如果没有此补丁,则不包括'
helper =
'行,并使用来自/etc/gitconfig
的凭据帮助程序。请注意,使用commit 515360f时,文档现在更清晰:
凭证文档:使多助手行为更加突出
Git的配置系统通过按顺序阅读多个配置文件来工作,从一般到特定:
/etc/gitconfig
~/.gitconfig
或~/.config/git/config
).git/config
)对于单值配置项,最新值获胜。
对于多值配置项,值按该顺序累积。
例如,这允许在
~/.gitconfig
中全局设置一个凭证助手,git将尝试在所有存储库中使用,无论它们是否额外提供另一个助手。这通常是件好事。我可以安装帮助程序来使用我的操作系统密钥链,并在短时间内全局缓存凭据。
有时人们希望能够覆盖继承的设置。
对于
credential.helper
的设置,可以先将配置项设置为空,然后再赋予新值。2w3kk1z54#
设置为空字符串的配置变量与未设置的变量不同。当一个变量已经在
~/.gitconfig
中被设置时,不可能在.git/config
中强制取消设置。此外,
credential.helper
是使用多个值的变量之一,在这种情况下,这些值是从所有读取的配置文件中聚合的。所以基本上你的选择似乎是:
~/.gitconfig
中不使用credential.helper
;只为你想要的仓库设置store helper,在.git/config
中,或者在~/.gitconfig
中,通过指定仓库URL,例如。git credential-store
。50few1ms5#
我也遇到了这个问题,因为当我想测试一个新的credential.helper时,我配置的第一个credential.helper总是在执行。这是在macOS上使用苹果开发工具提供的git。
使用
git config --list
列出配置显示了两个助手。运行
git config --global --edit
没有显示第一个帮助器的设置。有点奇怪的是,配置helper时的--global与编辑配置时的--global的作用域不同。另外,因为我想包括一个不同的助手,只是空白出来是不会解决它。
最后在两个地方找到了设置:
/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig
/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig
从第一个设置中删除了credential部分,但这两个设置仍然使用
--list
列出。在重新启动并尝试了unset、unset-all --system、--global、et的每一个组合之后,我找到了第二个文件。从该文件中删除了设置(同样只有一个),最后
--list
没有显示任何配置的帮助程序。