gitconfig文件中`[github]`和`[github“user”]`有什么区别?

时间:2014-01-14 18:07:49

标签: git git-config

我的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"]块。似乎没有什么打破。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

这说明了部分和子部分之间的区别。

请参见commit bff7df7commit 2d84f13commit 999d902(2018年8月8日)和Stefan Beller (stefanbeller)(2018年8月1日)。
(由Junio C Hamano -- gitster --commit 2a2c18f中合并,2018年8月20日)

  

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
     

子节区分大小写,我们进行了正确读取它们的测试。
  但是,我们没有进行使用区分大小写的小节名称正确写出配置的测试,这就是为什么6ae996fgit_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

在变量大小写很重要的OS上可能是个问题(另请参见下面的url大小写)

此问题已在Git 2.13(2017年第二季度)中进行了修复,这再次说明了部分与子部分之间的区别。

请参见commit 1274a15commit ee98df3Junio C Hamano (gitster)(2017年2月23日)。
(由Junio C Hamano -- gitster --commit 2f54451中合并,2017年3月10日)

  

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

     

一次性解析配置变量   从命令行来历来是相当宽松的,并且允许   任何要传递的东西。

     

它还将变量名中的所有内容都转换为小写形式,   甚至是一个三级<section>.<subsection>.<variable>名称,其中   该零件必须以区分大小写的方式处理。

一个三级<section>.<subsection>.<variable>名称的示例,无论设置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 insensitivewell as the domain一样,其余的网址(这里是/GitLab部分)can be case sensitive