59

如果我在我的 中设置了凭据帮助程序,我~/.gitconfig如何在特定的 repo 中禁用/绕过它并且使用凭据帮助程序?

我尝试编辑 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帮助程序,它将未加密的密码存储在磁盘上。cache帮助程序在此系统上不可用。我有几个存储库,我宁愿每次都输入密码而不是将其保存在磁盘上.)

4

5 回答 5

45

使用 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设置了一个,您永远无法避免运行它,而只能在顶部添加您自己的助手。

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


更方便:使用 Git 2.26(2020 年第一季度),此覆盖甚至适用于任何值。

请参阅提交 46fd7b3提交 82eb249提交 588c70e提交 732f934提交 3fa0e04(2020 年 2 月 20 日),作者是brian m。卡尔森(``)
(由Junio C Hamano 合并 -- gitster--提交 2cbb058中,2020 年 3 月 5 日)

credential:使用配置中最后一个匹配的用户名

签字人:brian m. 卡尔森

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

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

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

这很可能确保我们从 URL 中选择值,我们希望在配置中兑现该值。

不过,两者都可以,所以让我们检查该值是否是我们通过协议连接获得的值,如果存在,它将来自 URL,如果是,则保留它。

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


注意:user202729评论中添加:

如果凭据助手A设置为全局并且您想B本地存储库中使用(更改,而不是删除助手),请使用:

git config --local credential.helper ''
git config --local --add credential.helper B

第一个空项删除全局设置A

等效地,设置两条线helper =helper = B.git/config.

于 2016-04-05T19:52:39.410 回答
31

我尝试过并且效果很好的是:

$ git config --system --unset credential.helper

但为了使其正常工作,我必须设置 git-bash.exe 具有管理员权限。

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

祝你好运

于 2016-06-08T21:48:21.323 回答
21

除了上面提到的 Git 2.9git config credential.helper= ' '之外,您现在(Git 2.13.x/Git 2.14,2017 年第三季度)可以仅为一个命令(而不仅仅是给定仓库中的任何命令)禁用凭证帮助程序

这意味着git -c credential.helper= clone /url/remote/repo现在有效。

" git clone --config var=val" 是一种填充新存储库的每个存储库配置文件的方法,但是当 val 为空字符串时它不能很好地工作
这已得到修复。

请参阅Jonathan Nieder ( )的提交 db4eca1(2017 年 5 月 2 日) 。(由Junio C Hamano 合并——提交 883247c中,2017 年 5 月 16 日)artagnon
gitster

clone: 处理空配置值-c

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

git_config_set_multivar_gently(key, value, "^$", 0)

只要没有现有值与 regex 匹配^$,它就会按预期工作并添加到配置中。但是,当一个值为空时,它会替换现有值。

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

git clone -c credential.helper= \
     -c credential.helper=myhelper \
     https://example.com/repo

打算产生配置:

[credential]
     helper =
     helper = myhelper

如果没有此补丁,将helper =不包含“ ”行,并/etc/gitconfig使用来自的凭据助手。


请注意,提交 515360f后文档现在更加清晰:

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

Git 的配置系统通过按顺序读取多个配置文件来工作,从一般到具体:

  • 一、系统配置/etc/gitconfig
  • 然后是用户的配置(~/.gitconfig~/.config/git/config
  • 然后是存储库配置 ( .git/config)

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

例如,这允许在~/.gitconfiggit 中全局设置一个凭证助手,它将尝试在所有存储库中使用,无论它们是否另外提供另一个助手。
这通常是一件好事——例如,我可以安装帮助程序来使用我的操作系统钥匙串并在全球范围内在短时间内缓存凭据。

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

于 2017-05-17T19:30:15.827 回答
19

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

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

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

  • 要么不要使用credential.helperin ~/.gitconfig; 仅为您想要的存储库设置商店助手,无论是在他们的.git/config,还是~/.gitconfig通过指定回购 URL,例如。

    [credential "https://specific.example.com/repo.git"]
    helper = store
    
  • 或实现您自己的助手,它对一组已配置的存储库没有任何作用,并委托给git credential-store其余的存储库。

于 2012-11-02T22:01:33.650 回答
1

我也遇到了这个问题,因为我配置的第一个 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. 在重新启动并尝试了 unset、unset-all --system、--global 等的每个组合后,我找到了第二个文件。

从该文件中删除了设置(同样只有一个),最后--list没有显示任何配置的助手。

于 2019-01-22T10:07:59.920 回答