如何为新 Git 存储库配置默认配置?

How to configure default configuration for new Git repository?

在下面我们看到 Git 默认设置 ignorecase 为真,尽管我的 .gitconfig 配置。

$ mkdir foo && cd foo && git init
Initialized empty Git repository in /cygdrive/c/Users/nowox/home/git/foo/.git/
$ cat .git/config | grep ignore
        ignorecase = true

如何告诉 Git 将新存储库的 ignorecase 默认设置为 false?

我已将此配置文件放入 $GIT_TEMPLATE_DIR (/usr/share/git-core/templates):

[core]
        ignorecase = false 
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true

但是还是不行。我的 config 文件似乎被 Git...

删除了

完整示例

~/test $ git init
Initialized empty Git repository in /cygdrive/c/test/.git/
~/test $ cat .git/config
[core]
        ignorecase = true
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true

~/test $ cat /usr/share/git-core/templates/config
[core]
        ignorecase = false
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true

看来不行。两个配置文件不同:

~/test $ diff  /usr/share/git-core/templates/config .git/config
2,5c2,5
<         ignorecase = false
<         repositoryformatversion = 0
<         filemode = true
<         bare = false
---
>       ignorecase = true
>       repositoryformatversion = 0
>       filemode = true
>       bare = false

声明GIT_TEMPLATE_DIR变量也是一样的:

~/test $ rm -rf .git
~/test $ GIT_TEMPLATE_DIR=/usr/share/git-core/templates git init .
Initialized empty Git repository in /cygdrive/test/.git/
~/test $ cat .git/config
[core]
        ignorecase = true
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true

参见 TEMPLATE DIRECTORY of git-init

默认情况下,当我们初始化一个新的git repo 时,/usr/share/git-core/templates 下的内容将被复制到这个新repo 的.git。所以我们可以在这里为config制作一个模板,其中包括

[core]
    ignoreCase = false

对于 git-bash-for-windows,它是 /mingw64/share/git-core/templates//mingw32/share/git-core/templates/

除了手册上说的,我们还有以下选项来指定模板。

  1. --template 选项给出的参数;
  2. $GIT_TEMPLATE_DIR环境变量的内容;
  3. init.templateDir 配置变量。