是否可以在.gitconfig中包含一个文件

Dav*_*lds 227 git github

我想在我的.gitconfig中包含一个包含github设置的文件 - 这可能吗?

我可以这样做:

[core]
    include = /path/to/file
Run Code Online (Sandbox Code Playgroud)

Mik*_*rty 285

Git(1.7.10+)现在支持以下语法.gitconfig:

[include]
    path = /path/to/file
Run Code Online (Sandbox Code Playgroud)

有关git更改及其边缘情况的详细说明,请参见此处.

顺便说一句,值得指出的一些细微之处:

  1. 例如$HOME,不支持环境变量扩展.(扩展~出现在Git 1.7.10.2中.)

  2. 如果指定了相对路径,则它相对于具有该[include]语句的.gitconfig文件.这甚至可以在链式包含中正常工作 - 例如~/.gitconfig可以:

    [include]
        path = subdir/gitconfig
    
    Run Code Online (Sandbox Code Playgroud)

    并且subdir/gitconfig可以:

    [include]
        path = nested_subdir/gitconfig
    
    Run Code Online (Sandbox Code Playgroud)

    ...将导致subdir/nested_subdir/gitconfig加载.

  3. 如果git找不到目标文件,它会默默地忽略该错误.这似乎是设计上的.

  • 实际上你不需要`~`.这是因为你的.gitconfig文件仍然必须驻留在`〜/ .gitconfig`中,配置中的相对路径会暗示`~` ... (7认同)
  • 请注意,以这种方式包含的配置将不会在给出特定文件时显示(即使用 `--global`、`--local` 或 `--file`),除非使用 [`--includes` 明确告知](https://git-scm.com/docs/git-config/2.13.0#git-config---no-includes)(如`git config --global --includes --list`)。 (7认同)
  • `~` /`$ HOME`扩展实际上是`git describe --contains 4c0a89fc` - >`v1.7.10.2~12 ^ 2`(即`v1.7.10.2`或更高版本),值得注意的是似乎Debian 7和Ubuntu Quantal将以`v1.7.10.4`发布. (2认同)
  • 这支持全局吗?例如路径=〜/gitconfig.d/*? (2认同)
  • @Bret 不,这不支持全局。 (2认同)

Von*_*onC 15

2012年更新:

Mike Morearty回答:

包括

您可以通过将特殊include.path变量设置为要包含的文件的名称来包含另一个配置文件.
包含的文件立即展开,就好像它的内容已在include指令的位置找到.
如果include.path变量的值是相对路径,则该路径被认为是相对于找到include伪指令的配置文件.
值的值include.path受波形扩展的影响:~/扩展为值的值$HOME,并扩展到~user/指定用户的主目录.


我不这么认为.

我宁愿把那个设置放在~/.gitconfig文件中

用户特定的配置文件.也称为"全局"配置文件.

这样,它就完成了.gitconfig项目特定的文件,而不是在推送到GitHub时发布.有关全局配置文件的更多信息,请参阅此SO答案.
Git有3个配置文件.


bjeanes在评论中补充道:

看起来每个人都错过了这个问题.
大卫显然想推了他所有的点文件的回购(bashrc,gemrc包括他等),.gitconfig所以他可以有他对他的所有计算机的所有设置.通过包含和忽略私人条目
来推送.gitconfig文件的一部分的方法是他(和我,就此而言)所追求的.

一种可能的方法是使用涂抹/清理过滤器驱动程序使用私有敏感信息解密/加密一个文件(请参阅此线程),以便使用与之相关的解密部分完成〜/ .gitconfig之类的本地文件.文件.

这样你就可以拥有一个包含所有点文件的Git仓库,以及一个带有加密信息的文件,用于解密并添加到所述点文件中.

替代文字

.gitattributes(或.git/info/a..)使用:

myPrivateInfosFile filter=gpg diff=gpg
Run Code Online (Sandbox Code Playgroud)

在您的repo .config文件中:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt
Run Code Online (Sandbox Code Playgroud)

(基于GPG的解决方案意味着,当然,您已通过另一种方式将您的私钥/公钥传送到目标计算机上,您希望通过克隆此特殊仓库来恢复所有点文件)

实际上,在您的情况下,需要完成涂抹脚本,因为它必须在解密该文件后继续并将相关部分添加到您的全局~/.gitconfig文件中(除非您用其他位置覆盖全局配置文件)或其他点文件物.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (此线程中进一步讨论了gpg的不便之处)(这与完全加密的Git仓库不同,如此处所述)

  • 我想在git存储库中发布我的基本.gitconfig文件,但我不想在其中包含github细节,因此我想以某种方式从外部文件中包含它们. (5认同)

ken*_*orb 8

您可以从命令行加载它:

$ git config --local include.path "/path/to/.gitconfig"
Run Code Online (Sandbox Code Playgroud)

"$PWD"/.gitconfig如果要从当前目录加载文件,请改用.

运行上述命令后,以下行将添加到您的.git/config文件中:

[include]
        path = /path/to/.gitconfig
Run Code Online (Sandbox Code Playgroud)