263

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

我可以做这样的事情:

[core]
    include = /path/to/file
4

4 回答 4

331

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

[include]
    path = /path/to/file

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

顺便说一句,有几点值得指出:

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

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

    [include]
        path = subdir/gitconfig
    

    并且subdir/gitconfig可以有:

    [include]
        path = nested_subdir/gitconfig
    

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

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

于 2012-03-16T07:09:33.217 回答
17

2012 年更新:

请参阅Mike Morearty回答

包括

include.path您可以通过将特殊变量设置为要包含的文件的名称来包含另一个配置文件。
包含的文件立即展开,就好像它的内容已在包含指令的位置找到一样。
如果include.path变量的值是相对路径,则该路径被认为是相对于包含指令所在的配置文件的。
的值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

在您的 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 的解决方案意味着您已经通过另一种方式将您的私钥/公钥传递到您想要通过克隆此特殊存储库来恢复所有点文件的目标计算机上)

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

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg 不便将在此线程中进一步讨论)(这与拥有完整加密的 Git 存储库不同,如此处所述

于 2009-10-13T04:03:05.117 回答
10

您可以从命令行加载它:

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

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

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

[include]
        path = /path/to/.gitconfig
于 2015-10-10T20:44:28.573 回答
2

我相信您可以使用 defunkt 的集线器工具来完成此任务。这是 git 命令的包装器,除其他外,它允许您拥有GITHUB_USERGITHUB_TOKEN环境变量。这将覆盖本地.gitconfig文件中的设置。

然后为了使其无缝,您指向的用户alias git=hub在他的ZSH config中使用别名。然后,您应该能够获取一个本地文件,您可以在其中设置环境变量,并将您的存储库推送到公共世界,同时保留您所有的私人信息。

**对于 OSX 上的 homebrew 用户,您可以通过brew install hub.

于 2011-09-06T20:56:08.393 回答