如何告诉 git 忽略全局配置

gib*_*gib 6 git

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

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

如果目前不可能,我可以在他们的问题跟踪器上提出问题。

Von*_*onC 8

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

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

请参阅帕特里克·斯坦哈特 (Patrick Steinhardt)提交的提交 482d549(2021 年 4 月 23 日)、提交 4179b48提交 1e06eb9提交 c62a999(2021 年 4 月 19 日(由Junio C Hamano 合并 -- --提交 e706aaf中,2021 年 5 月 7 日)pks-t
gitster

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

签署人:帕特里克·斯坦哈特

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

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

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

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

这实现了我们希望在干净的环境中执行代码而不会通过 任何潜在的错误配置的用例/dev/null,但它比简单添加更灵活,并且允许更多用例GIT_CONFIG_NOGLOBAL

git config现在包含在其手册页中:

GIT_CONFIG_GLOBAL

GIT_CONFIG_SYSTEM

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

git现在包含在其手册页中:

GIT_CONFIG_GLOBAL

GIT_CONFIG_SYSTEM

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


例如,baltakatei在评论中提到,可能在这种情况下:

export GIT_CONFIG_GLOBAL=''; export GIT_CONFIG_SYSTEM=''在运行之前运行make允许我编译一个程序,当我的文件中git log -1 --pretty=oneline somefile有提交哈希时,该程序期望获得提交哈希。 (可以根据文件中的内容打印多行)。 上下文:编译Kaldi,一个语音转录程序。log.showsignature=true~/.gitconfig
git log-1 --pretty=onelinegitconfig