注意:要小心 git config 子节:最近更新的“git config”破坏了子节中变量的更新,这已在 Git 2.19(2018 年第三季度)得到修正。
这说明了节和子节之间的区别。
请查看提交 bff7df7, 提交 2d84f13 (2018年8月8日),以及提交 999d902 (2018年8月1日) ,作者为Stefan Beller (stefanbeller
)。
(由Junio C Hamano -- gitster
--合并于提交 2a2c18f,2018年8月20日)
config
: fix case sensitive subsection names on writing
A user reported a submodule issue regarding a section mix-up, but it could be boiled down to the following test case:
$ git init test && cd test
$ git config foo."Bar".key test
$ git config foo."bar".key test
$ tail -n 3 .git/config
[foo "Bar"]
key = test
key = test
Sub sections are case sensitive and we have a test for correctly reading them.
However we do not have a test for writing out config correctly with case sensitive subsection names, which is why this went unnoticed in 6ae996f (git_config_set
: make use of the config parser's event stream, 2018-04-09, Git 2.18)
Unfortunately we have to make a distinction between old style configuration that looks like:
[foo.Bar]
key = test
and the new quoted style as seen above.
The old style is documented as case-agnostic, hence we need to keep 'strncasecmp
'; although the resulting setting for the old style config differs from the configuration.
请确保使用Git 2.19(如上所示),或者至少使用Git 2.13或更高版本。
未记录的是git -c
曾经将变量名转换为小写:
vonc@bvonc MINGW64 ~
$ git version
git version 2.12.0.windows.1
vonc@bvonc MINGW64 ~
$ git -c VAR=c config -l|grep var
var=c
这可能是在区分大小写的操作系统上的一个问题(请参见下面的url大小写)
Git 2.13(Q2 2017)中已经修复了此问题,这提供了另一个例子来说明节和子节之间的区别。
请查看 提交 1274a15 和 提交 ee98df3(2017年2月23日),作者为 Junio C Hamano (gitster
)。
(由Junio C Hamano -- gitster
--合并于提交 2f54451,2017年3月10日)
config
:在git_config_parse_parameter()
中使用git_config_parse_key()
从命令行传递的配置变量的一次性赋值历史上一直很松散,允许任何内容通过。
它还将变量名称中的所有内容转换为小写字母,
即使是三级的<section>.<subsection>.<variable>
名称中的部分也必须以区分大小写的方式处理。
设置URL时,操作系统不管怎样都会考虑大小写问题,在下面是一个三级<section>.<subsection>.<variable>
名称的示例:
vonc@bvonc MINGW64 ~
$ git -c url."https://myserver/GitLab".insteadOf=git@myserver.org/GitLab config -l|grep -i Gitlab
url.https://myserver.org/gitlab.insteadof=git@myserver.org/GitLab
如果您的私有 Git 存储库服务器 URL 不完全为小写,则该命令将不起作用。
虽然 url 的方案可能不区分大小写, 以及域名, 但 url 的其余部分(这里是 /GitLab
部分)可能区分大小写。