gitconfig 文件中的 `[github]` 和 `[github "user"]` 有啥区别?

Posted

技术标签:

【中文标题】gitconfig 文件中的 `[github]` 和 `[github "user"]` 有啥区别?【英文标题】:what's the difference between `[github]` and `[github "user"]` in a gitconfig file?gitconfig 文件中的 `[github]` 和 `[github "user"]` 有什么区别? 【发布时间】:2014-02-02 22:33:26 【问题描述】:

我的 gitconfig 中有以下两个块,用真实信息代替 <placeholders>

[github]
  user = <name>
  token = <token>
  email = <email address>
[github "user"]
  user = <name>
  token = <token>
  email = <email address>

两者都包含相同的 3 个值,我想这是不必要的重复,但有什么区别,我应该删除哪个?它不会造成任何问题。

另外,我也有这个块:

[user]
  name = <name>
  email = <email address>

再次,相同的姓名和电子邮件地址。

更新:运行git config --list 显示的值

github.user
github.token
github.email

还有

github.user.user
github.user.token
github.user.email

这对我来说看起来很不对劲,我从文件中删除了整个 [github "user"] 块。似乎还没有损坏。

【问题讨论】:

【参考方案1】:

据我所知,该语法意味着您有一个 github 部分和一个 github "user" 子部分 (see under Syntax)。这意味着您可以访问github,也可以访问github.user,正如您在--list 中所注意到的那样。这样你就可以存储不同的值。正如您所见,由于您的值相同,您应该能够删除 [github "user"] 而不会破坏任何内容。

【讨论】:

【参考方案2】:

注意:注意 git config 小节:最近对“git config”的更新破坏了小节中的更新变量,已在 Git 2.19(2018 年第三季度)中更正。

这说明了节和小节之间的区别。

见commit bff7df7、commit 2d84f13(2018 年 8 月 8 日)和 commit 999d902(2018 年 8 月 1 日)Stefan Beller (stefanbeller)。(由 Junio C Hamano -- gitster -- 合并于 commit 2a2c18f,8 月 20 日2018)

config:在写作时修复区分大小写的小节名称

一个用户报告了一个关于部分混淆的子模块问题,但它可以归结为以下测试用例:

$ 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

子部分区分大小写,我们对它们进行了正确阅读测试。 但是,我们没有使用区分大小写的小节名称正确写出配置的测试,这就是为什么在6ae996f(git_config_set:利用配置解析器的事件流,2018-04-09,Git 2.18 )

不幸的是,我们必须区分看起来像这样的旧式配置:

[foo.Bar]
      key = test

和上面看到的新引用样式。

旧样式被记录为不区分大小写,因此我们需要保留 'strncasecmp';尽管旧样式配置的结果设置与配置不同。


确保使用 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(2017 年第二季度)中得到修复,并提供了节与小节之间差异的另一个说明。

参见Junio C Hamano (gitster) 的commit 1274a15 和commit ee98df3(2017 年 2 月 23 日)。(由 Junio C Hamano -- gitster -- 合并到 commit 2f54451,2017 年 3 月 10 日)

config:在git_config_parse_parameter() 中使用git_config_parse_key()

解析配置变量的一次性赋值 来自命令行历史上是相当松散的并且被允许 有什么可以通过的。

它还对变量名中的所有内容进行了小写, 甚至是一个三级的&lt;section&gt;.&lt;subsection&gt;.&lt;variable&gt; 名称,其中 该部分必须以区分大小写的方式处理

三级&lt;section&gt;.&lt;subsection&gt;.&lt;variable&gt; 名称的示例,无论操作系统在设置 url 时,大小写都很重要:

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 不是完全小写...该命令将不起作用。 而scheme of an url might be case insensitive,如well as the domain,其余的url(这里是/GitLab部分)can be case sensitive。

【讨论】:

以上是关于gitconfig 文件中的 `[github]` 和 `[github "user"]` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

上传本地文件到github

github

.gitconfig从GitHub切换到GitLab的全局远程URL

git与github的文件推送

GitHub上传本地文件

Github的初始设置