使用 Git 2.31(2021 年第一季度),您可能会考虑通过环境变量使用配置变量-值对(它调整了GIT_CONFIG_PARAMETERS
变量/值对的编码方式,使其也更加健壮)。
请参阅Patrick Steinhardt ( ) 的提交 d8d7715、提交 b9d147f、提交 1ff21c0、提交 b342ae6、提交 ce81b1d(2021 年 1 月 12 日)和提交 b0812b6(2021 年 1 月 7 日)。
请参阅Jeff King ( ) 的提交 f9dbb64和提交 13c4495(2021 年 1 月 12 日)。(由Junio C Hamano 合并 -- --在提交 294e949中,2021 年 1 月 25 日)pks-t
peff
gitster
config
: 添加新的方式来传递配置--config-env
合着:Jeff King
署名:Patrick Steinhardt
虽然已经可以通过( man )传递运行时配置,但当值包含敏感信息时可能不希望使用它。
例如
,如果一个人想要设置包含一个身份验证令牌,这样做会通过 eg 轻易泄露这些凭据,这通常也会显示命令参数。git -c <key>=<value>
http.extraHeader
-c
ps(1)
为了在不泄漏凭据的情况下启用此用例,此提交引入了一个新的 switch --config-env=<key>=<envvar>
。
它不是直接传递给定键的值,而是允许用户指定环境变量的名称。
然后该变量的值将用作键的值。
git
现在在其手册页中包含:
[--super-prefix=<path>] [--config-env <name>=<envvar>]
git
现在在其手册页中包含:
--config-env=<name>=<envvar>
就像-c <name>=<value>
,给配置变量“ <name>
”一个值,其中<envvar>
是一个环境变量的名称,从中检索该值。
与
-c
没有直接将值设置为空字符串的快捷方式不同,环境变量本身必须设置为空字符串。
如果<envvar>
环境中不存在 则为错误。<envvar>
可能不包含等号以避免与<name>
包含一个的 s 产生歧义。
这对于您希望将临时配置选项传递给 git 的情况很有用,但在其他进程可能能够读取您的 cmdline(例如/proc/self/cmdline
)而不是您的环境(例如)的操作系统上这样做/proc/self/environ
。
该行为是 Linux 上的默认行为,但可能不在您的系统上。
请注意,这可能会增加变量的安全性,例如
http.extraHeader
敏感信息是值的一部分,而不是url.<base>.insteadOf
敏感信息可以是密钥的一部分。
在您的情况下,使用以下方法对其进行测试:
git --config-env=core.excludesfile=RC config core.excludesfile
# or (Git 2.32+ only)
git --config-env core.excludesfile=RC config core.excludesfile
的值core.excludesfile
应该是$RC
(它应该引用完整的文件路径,而不仅仅是它的父文件夹)
注意:在 Git 2.32(2021 年第二季度)之前,“ git --config-env var=val cmd
” (man)不被接受(仅--config-env=var=val
被接受)。
请参阅Patrick Steinhardt ( ) 的提交 c331551、提交 9152904(2021 年 4 月 29 日)。(由Junio C Hamano 合并 -- --在提交 5f586f5中,2021 年 5 月 7 日)pks-t
gitster
git
: 支持单独的 arg--config-env
的值
签字人:Patrick Steinhardt
审核人:Jeff King
虽然没有这样记录,但许多顶级选项都喜欢--git-dir
并--work-tree
支持两种语法:它们接受选项及其值之间的等号,并且它们支持将选项和值作为两个单独的参数。
最近添加的--config-env
选项仅支持带等号的语法。
通过接受这两种语法并添加测试来验证这两种工作,来缓解这种不一致。
但还有更多,仍然是 Git 2.31:
config
: 允许通过 envvar 对指定配置条目
签字人:Patrick Steinhardt
虽然我们目前拥有GIT_CONFIG_PARAMETERS
可用于将运行时配置数据传递给 git 进程的环境变量,但它是内部实现细节,不应由最终用户使用。
除了仅供内部使用之外,这种传递配置条目的方式还有一个主要缺点:需要解析配置键,因为它们在单个变量中包含键和值。
因此,用户可以转义值中的任何潜在有害字符,如果值由第三方控制,则很难做到这一点。
因此,此提交添加了一种通过环境添加配置条目的新方法,从而消除了此缺点。
如果用户传递GIT_CONFIG_COUNT=$n
环境变量,Git 将解析环境变量对,GIT_CONFIG_KEY_$i
并GIT_CONFIG_VALUE_$i
为i
.[0,n)
虽然使用( man )也可以实现相同的效果,但对于潜在的敏感信息可能不希望这样做。
例如
,如果一个人想要设置包含一个身份验证令牌,这样做会通过 eg 轻易泄露这些凭据,这通常也会显示命令参数。git -c <name>=<value>
http.extraHeader
-c
ps(1)
git config
现在在其手册页中包含:
GIT_CONFIG_COUNT
GIT_CONFIG_KEY_<n>
GIT_CONFIG_VALUE_<n>
如果GIT_CONFIG_COUNT
设置为正数,则所有环境对
GIT_CONFIG_KEY_<n>
以及GIT_CONFIG_VALUE_<n>
不超过该数字的所有环境对都将添加到进程的运行时配置中。
配置对是零索引的。
任何缺少的键或值都被视为错误。空GIT_CONFIG_COUNT
的被视为与 相同GIT_CONFIG_COUNT=0
,即不处理任何对。
这些环境变量将覆盖配置文件中的值,但会被通过git -c
.
这对于您想要使用通用配置生成多个 git 命令但不能依赖于配置文件的情况很有用,例如在编写脚本时。
例如:
GIT_CONFIG_COUNT=2 \
GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="foo" \
GIT_CONFIG_KEY_1="pair.two" GIT_CONFIG_VALUE_1="bar" \
git config --get-regexp "pair.*"
将打印:
pair.one foo
pair.two bar