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

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

我可以这样做吗?

[core]
include = /path/to/file
41345 次浏览

2012年更新:

参见迈克Morearty回答:

包括

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

我不这么认为。

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

用户特定的配置文件。也称为“全局”配置文件。

这样,它就完成了.gitconfig项目特定文件,而不会在推送到GitHub时发布。关于全局配置文件的更多信息,也请参见所以回答 Git有3个配置文件.

.

bjeanes在注释中添加:

看起来每个人都错过了这个问题的重点 David显然想把他所有的点文件(bashrcgemrc等)包括他的.gitconfig的回购,这样他就可以在他所有的机器上拥有他的所有设置 一种通过包含和忽略私有项来推送.gitconfig文件的部分的方法是他(和我,就此而言)所追求的

一种可能的方法是使用涂抹/清洁过滤器驱动程序来解密/加密一个包含私有敏感信息的文件(参见这个线程),以完成一个像~/这样的本地文件。Gitconfig和与该文件相关的解密部分。

通过这种方式,您可以拥有一个包含所有dot文件的Git repo,再加上一个包含加密信息的文件,该文件将被解密并添加到所述dot文件中。

alt text

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

myPrivateInfosFile filter=gpg diff=gpg

在你的repo .config文件中:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

(一个GPG-based解决方案意味着,当然,你已经通过另一种方式将你的私钥/公钥传递到目标计算机上,你想通过克隆这个特殊的repo来恢复你所有的点文件)

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

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg的不便将在这个线程中进一步讨论) (这与完全加密的Git repo不同,如这里讨论)

我相信你可以使用Defunkt的枢纽工具来实现这一点。这是git命令的包装器,它允许你有GITHUB_USERGITHUB_TOKEN环境变量。它将覆盖本地.gitconfig文件中的设置。

然后,为了使它无缝,你指向的用户的别名alias git=hub在他的ZSH配置。然后,您应该能够获取一个本地文件,在其中设置环境变量,并将存储库与您的所有私有信息巧妙地推向公共世界。

**注:对于OSX上的自制用户,您可以通过brew install hub安装该工具。

Git(1.7.10+)现在支持这个语法在.gitconfig:

[include]
path = /path/to/file

参见在这里获取git更改及其边缘情况的详细描述。

顺便说一下,有几个细微之处值得指出:

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

  2. 如果指定了相对路径,则它相对于包含[include]语句的.gitconfig文件。即使跨链include也可以正确工作——例如~/.gitconfig可以有:

    [include]
    path = subdir/gitconfig
    

    subdir/gitconfig可以有:

    [include]
    path = nested_subdir/gitconfig
    

    ... 这将导致subdir/nested_subdir/gitconfig被加载。

  3. 如果git找不到目标文件,它会默默地忽略这个错误。这似乎是有意为之。

你可以从命令行加载它:

$ git config --local include.path "/path/to/.gitconfig"

如果你想从当前目录加载文件,使用"$PWD"/.gitconfig代替。

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

[include]
path = /path/to/.gitconfig