如何告诉git忽略全局配置

时间:2017-05-10 00:30:23

标签: git

The Git docs讨论默认的全局git配置文件位置($XDG_CONFIG_HOME/git/config~/.gitconfig),但是没有提供告诉git命令忽略该文件的方法。

我正在寻找一个环境变量,可能称为$GIT_CONFIG_NOGLOBAL(类似于$GIT_CONFIG_NOSYSTEM),或者是一个传递给git命令的标志(例如--ignore-global-config)。我需要它,因为我的标准git设置(尤其是commit.gpgsign true)会干扰使用git的测试套件。

如果目前无法实现,我可以在问题跟踪器上提出问题。

3 个答案:

答案 0 :(得分:2)

  

我需要它,因为我的标准git设置(特别是commit.gpgsign为true)会干扰使用git的测试套件。

我称之为测试套件中的错误。它们应该被设置为忽略外部配置。我建议向测试套件作者报告。他们会做同样的事情:

  

GIT_CONFIG_NOSYSTEM

     

是否跳过从系统范围的$(前缀)/ etc / gitconfig文件中读取设置。此环境变量可与$ HOME和一起使用              $ XDG_CONFIG_HOME为挑剔的脚本或者你创建一个可预测的环境              可以暂时设置它以避免在等待时使用错误的/ etc / gitconfig文件              对于有足够权限来修复它的人。

设置GIT_CONFIG_NOSYSTEM,取消设置XDG_CONFIG_HOME,更改$HOME

@Pockets commented,其中包含指向Git test suite的链接,您可以在其中查看他们所做的所有事情,以确保Git处于隔离状态。

答案 1 :(得分:2)

Git 2.32(2021 年第二季度)的另一种方法是使用新的 GIT_CONFIG_SYSTEM

Git 2.32 用 GIT_CONFIG_NOSYSTEM 替换了拒绝读取系统范围配置文件的 GIT_CONFIG_SYSTEM 机制,允许用户指定从哪个文件读取系统范围配置(将其设置为空文件本质上与设置 NOSYSTEM) 相同),并引入 GIT_CONFIG_GLOBAL 以覆盖 $HOME/.gitconfig 中的每个用户配置。

请参阅 commit 482d549(2021 年 4 月 23 日)和 commit 4179b48commit 1e06eb9commit c62a999(2021 年 4 月 19 日)。
(由 Patrick Steinhardt (pks-t)Junio C Hamano -- gitster -- 合并,2021 年 5 月 7 日)

<块引用>

commit e706aaf:允许覆盖全局和系统配置

签字人:Patrick Steinhardt

<块引用>

为了让 git 在完全受控的环境中运行而不会出现任何错误配置,用户或脚本可能需要覆盖全局和系统级配置文件。
我们已经有办法做到这一点,即取消设置 HOME 和 XDG_CONFIG_HOME 环境变量并设置 GIT_CONFIG_NOGLOBAL=true
这很麻烦,取消设置前两个变量可能会对由此类脚本生成的其他可执行文件产生影响。

解决此问题的显而易见的方法是引入 GIT_CONFIG_NOGLOBAL 等价于 GIT_CONFIG_NOSYSTEM
但是在过去,事实证明这种设计是不灵活的:我们无法在我们的测试工具中测试 git 配置的系统级解析,因为无法更改其位置,因此所有测试都使用 GIT_CONFIG_NOSYSTEM设置。

不要用 GIT_CONFIG_NOGLOBAL 犯同样的错误,而是引入两个新变量 GIT_CONFIG_GLOBALGIT_CONFIG_SYSTEM

  • 如果未设置,git 将继续使用通常的位置。
  • 如果设置为特定路径,我们将跳过读取普通配置文件,而是采用路径。
    通过将路径设置为 /dev/null,不会为相应级别加载任何配置。

这实现了我们希望通过 /dev/null 在经过清理的环境中执行代码而没有任何潜在错误配置的用例,但比简单地添加 GIT_CONFIG_NOGLOBAL 更灵活并允许更多用例。

git config 现在包含在其 config 中:

<块引用>

GIT_CONFIG_GLOBAL

GIT_CONFIG_SYSTEM

从给定的文件中获取配置,而不是从全局或 系统级配置。

git 现在包含在其 man page 中:

<块引用>

GIT_CONFIG_GLOBAL

GIT_CONFIG_SYSTEM

从给定的文件中获取配置,而不是从全局或 系统级配置文件。如果设置了 GIT_CONFIG_SYSTEM,则 在构建时定义的系统配置文件(通常为 /etc/gitconfig) 不会被读取。同样,如果设置了 GIT_CONFIG_GLOBAL,则 $HOME/.gitconfig$XDG_CONFIG_HOME/git/config 都不会被读取。能 设置为 /dev/null 跳过读取配置文件 各自的级别。

答案 2 :(得分:0)

使用docker,无需设置变量即可隔离。

Thread.sleep(1000)
flushBackgroundThreadScheduler()
flushForegroundThreadScheduler()
cf.isDone

对于您的测试套件,您可以通过设置用于设置测试框架+ git并以类似方式运行它的Dockerfile(此处省略,因为我不知道您的测试情况)来执行相同的操作。

如果您还需要向git提供ssh凭据,并且您正在使用ssh-agent,则还可以安装ssh auth套接字:

docker run -it --rm -v "$(pwd)":/work:ro -w /work alpine sh -c 'apk add git && git status'