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

Bra*_*bby 38 git

如果我在我的凭据帮手一套~/.gitconfig,我怎么可以禁用/绕过它在特定的回购和使用凭证帮手?

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

[credential]
    helper = 
Run Code Online (Sandbox Code Playgroud)

...但是当我这样做时,git push我收到以下错误消息,并且Git始终使用我的默认凭据帮助程序~/.gitconfig:

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

Did you mean this?
        credential
Run Code Online (Sandbox Code Playgroud)

我正在使用git版本1.7.12.

(背景/用例:Git配置为使用store帮助程序,它将未加密的密码存储在磁盘上.该cache系统上的帮助程序不可用.我有几个存储库,我宁愿每次都输入密码而不是将其保存在磁盘上.)

Von*_*onC 30

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

请参阅Jeff King()提交的2432137(2016年2月26日).(由Junio C Hamano合并- -提交1b68962,2016年4月3日)peff
gitster

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

credential:让空凭证规范重置帮助程序列表

由于credential.helper密钥是一个多值配置列表,因此一旦设置好帮助器就无法"取消设置".因此,如果您的系统/etc/gitconfig设置了一个,您永远不能避免运行它,而只是在顶部添加您自己的帮助程序.

由于空值credential.helper是无意义的(它只会尝试运行" git-credential-"),我们可以假设没有人使用它.让我们定义它来重置帮助程序列表,让你覆盖以前的低优先级实例.


小智 19

我尝试过并且运作良好的是:

$ git config --system --unset credential.helper
Run Code Online (Sandbox Code Playgroud)

但为了工作正常,我不得不设置具有管理员权限的git-bash.exe.

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

祝好运

  • 我需要`git config --unset credential.helper`这个值存储在一个repo中....但是使用两者都解决了我的问题和没有`--system` (2认同)

Mic*_*ski 16

设置为空字符串的配置变量与未设置的变量不同..git/config当变量已经设置时,无法强制取消设置~/.gitconfig.

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

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

  • 要么不使用credential.helper~/.gitconfig; 只为您想要的存储库设置商店助手,无论是在其中.git/config,还是~/.gitconfig通过指定repo URL,例如.

    [credential "https://specific.example.com/repo.git"]
    helper = store
    
    Run Code Online (Sandbox Code Playgroud)
  • 或实现自己的帮助程序,它对一组已配置的存储库不执行任何操作,并git credential-store为其余的代理程序执行任务.


Von*_*onC 12

除了上面在Git 2.9中提到的' git config credential.helper=' 之外,您现在(Git 2.13.x / Git 2.14,Q3 2017)还可以仅针对一个命令(而不只是给定回购中的任何命令)禁用凭据助手。

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

git clone --config var=val”是一种填充新存储库的每个存储库配置文件的方法,但是当val为空字符串时它不能很好地工作
此问题已解决。

请参阅Jonathan Nieder()的commit db4eca1(2017年5月2日(通过合并JUNIOÇ滨野- -提交883247c,2017年5月16日)artagnon
gitster

clone:处理中的空配置值 -c

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

git_config_set_multivar_gently(key, value, "^$", 0)
Run Code Online (Sandbox Code Playgroud)

只要没有现有值与regex匹配,该表达式^$就可以按预期工作并添加到配置中。但是,当值为空时,它将替换现有值。

credential.helper在克隆期间尝试设置为使用特定帮助程序而不从~/.gitconfigand 继承时注意到/etc/gitconfig
也就是说,我跑了:

git clone -c credential.helper= \
     -c credential.helper=myhelper \
     https://example.com/repo
Run Code Online (Sandbox Code Playgroud)

打算产生配置:

[credential]
     helper =
     helper = myhelper
Run Code Online (Sandbox Code Playgroud)

如果没有此修补程序,helper =则不包括' '行,并且/etc/gitconfig会使用来自的凭据帮助器。


注意,现在通过提交515360f可以使文档更加清晰:

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

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

  • 一,系统配置 /etc/gitconfig
  • 然后是用户的配置(~/.gitconfig~/.config/git/config
  • 然后是资料库配置(.git/config

对于单值配置项目,以最新值为准。
对于多值配置项,值按该顺序累积。

例如,这允许全局设置凭据帮助程序,~/.gitconfig因为git将尝试在所有存储库中使用,而不管它们是否另外提供了另一个帮助程序。
通常这是一件好事-例如,我可以安装助手来使用我的OS钥匙串并在全球范围内短时间缓存凭据。

有时人们希望能够覆盖继承的设置。
对于credential.helper设置,这是通过在将配置项设置为空之前将其赋予新值来完成的