如何禁用git';单个存储库的凭据帮助器?

如何禁用git';单个存储库的凭据帮助器?,git,Git,如果我在我的~/.gitconfig中设置了凭证帮助器,我如何在特定的repo中禁用/绕过它而不使用凭证帮助器 我已尝试编辑repo的.git/config文件以清空credential.helper属性,如下所示: [credential] helper = 。。。但是当我执行git推送时会收到以下错误消息,git仍然使用~/.gitconfig中的默认凭证帮助程序: git: 'credential-' is not a git command. See 'git --help'

如果我在我的
~/.gitconfig
中设置了凭证帮助器,我如何在特定的repo中禁用/绕过它而不使用凭证帮助器

我已尝试编辑repo的
.git/config
文件以清空
credential.helper
属性,如下所示:

[credential]
    helper = 
。。。但是当我执行
git推送时
会收到以下错误消息,git仍然使用
~/.gitconfig
中的默认凭证帮助程序:

git: 'credential-' is not a git command. See 'git --help'.

Did you mean this?
        credential
我使用的是git版本1.7.12


(后台故事/用例:Git配置为使用
存储
帮助器,该帮助器在磁盘上存储未加密的密码。
缓存
帮助器在此系统上不可用。我有几个repo,我宁愿每次键入密码,也不愿将其保存在磁盘上。)设置为空字符串的配置变量与未设置变量不同。如果变量已在
~/.gitconfig
中设置,则无法强制在
.git/config
中取消设置该变量

此外,
credential.helper
是使用多个值的这些变量之一,在这种情况下,这些值从所有读取配置文件聚合而来

所以基本上你的选择似乎是:

  • 不要在
    ~/.gitconfig
    中使用
    credential.helper
    ;通过指定repo URL,仅在存储库的
    .git/config
    ~/.gitconfig
    中为需要的存储库设置store helper,例如

    [credential "https://specific.example.com/repo.git"]
    helper = store
    
  • 或者实现您自己的助手,该助手对一组已配置的存储库不做任何操作,其余部分委托给
    git凭证存储

使用git 2.9(2016年6月),这个(
helper=
)将实际工作

参见(2016年2月26日)作者。
(于2016年4月3日被合并)

credential.helper
配置变量是累积变量,无法从命令行重写它。
作为一种特殊情况,给出一个空字符串作为其值,现在作为清除各种文件中指定值的信号

凭证
:让空凭证规格重置帮助器列表 由于
credential.helper
键是一个多值配置列表,因此一旦设置了helper,就无法“取消设置”它。因此,如果您的系统
/etc/gitconfig
设置了一个,您永远无法避免运行它,只能在上面添加您自己的助手

由于
credential.helper
的空值是无意义的(它只会尝试运行“
git-credential-
”),因此我们可以假设没有人在使用它。让我们定义它来重置帮助器列表,从而覆盖优先级较低的实例 我以前来过


更方便的是:对于Git2.26(2020年第1季度),这种覆盖甚至适用于任何值

参见,,(2020年2月20日)by.
(于2020年3月5日合并)

:使用配置中最后一个匹配的用户名 签字人:brian m。卡尔森

在代码库的其他地方,我们使用最后一个匹配配置选项生效的规则

这很有帮助,因为它允许更具体的配置设置(例如,每个回购配置)覆盖不太具体的设置(例如,每个用户配置)

然而,在凭证代码中,我们不遵守此设置,而是选择了我们拥有的第一个设置,并坚持使用它

这可能会确保我们从URL中选择了值,我们希望在配置中遵守该值

但是,这两种方法都有可能做到,所以让我们检查一下这个值是否是我们通过协议连接得到的值,如果存在的话,它将来自URL,如果是的话,请保留它

否则,让我们用从配置中获得的最新版本覆盖该值,因此保留最后一个配置值


我已经尝试过,而且效果很好的是:

$ git config --system --unset credential.helper
但为了使其正常工作,我必须将git-bash.exe设置为具有管理员权限

不幸的是,我认为这是一个全局变量。您应该测试并查看它是否适用于单个存储库


祝您好运

除了“
git config credential.helper=
”之外,您现在(git 2.13.x/git 2.14,2017年第3季度)可以仅为一个命令(而不仅仅是给定repo中的任何命令)禁用凭证帮助器


这意味着git-c credential.helper=clone/url/remote/repo现在可以工作了

git clone--config var=val
”是一种填充 新存储库的每个存储库配置文件,但当val为空字符串时,该文件无法正常工作
这个问题已经解决了

参见(2017年5月2日)作者。
(于2017年5月16日被合并)

clone
:在
-c
git clone--config
”使用以下咒语将项添加到配置文件中,而不是替换现有值:

git_config_set_multivar_gently(key, value, "^$", 0)
只要没有与regex
^$
匹配的现有值,它就会按预期工作并添加到配置中。但是,当值为空时,它将替换现有值

在克隆过程中尝试设置
credential.helper
以使用特定的帮助程序而不继承
~/.gitconfig
/etc/gitconfig

就是我跑,

git clone -c credential.helper= \
     -c credential.helper=myhelper \
     https://example.com/repo
打算生成配置:

[credential]
     helper =
     helper = myhelper
如果没有此修补程序,将不包括“
helper=
”行,并且将使用
/etc/gitconfig
中的凭证帮助程序


请注意,文档现在更清晰,包括:

凭证文档:使多助手行为更加突出

Git的配置系统通过从常规到特定顺序读取多个配置文件来工作:

  • 第一,制度