如何为单个存储库禁用git的凭证助手?

时间:2012-11-02 15:19:17

标签: git

如果我在~/.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帮助程序在此系统上不可用。我有几个存储库用于我每次都要输入密码,而不是将其保存在磁盘上。)

5 个答案:

答案 0 :(得分:29)

使用git 2.9(2016年6月),这个(helper =)实际上会有效!

commit 2432137Jeff 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 db4eca1Jonathan 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不显示配置的任何帮助程序。