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的测试套件。
如果目前无法实现,我可以在问题跟踪器上提出问题。
答案 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 4179b48、commit 1e06eb9、commit c62a999(2021 年 4 月 19 日)。
(由 Patrick Steinhardt (pks-t
) 于 Junio C Hamano -- gitster
-- 合并,2021 年 5 月 7 日)
签字人: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_GLOBAL
和 GIT_CONFIG_SYSTEM
:
/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'