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

时间:2009-10-12 22:01:52

标签: git github

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

我可以这样做:

[core]
    include = /path/to/file

4 个答案:

答案 0 :(得分:272)

Git(1.7.10 +)现在supports .gitconfig中的[include] path = /path/to/file

$HOME

有关git更改及其边缘情况的详细说明,请参阅here

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

  1. 环境变量扩展,例如~,不受支持。 (扩展[include]出现在Git 1.7.10.2中。)

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

    subdir/gitconfig

    [include] path = nested_subdir/gitconfig 可以:

    subdir/nested_subdir/gitconfig

    ...这将导致{{1}}被加载。

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

答案 1 :(得分:14)

2012年更新:

请参阅Mike Moreartyanswer

  

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


我不这么认为。

我宁愿将该设置放在~/.gitconfig file

  

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

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


bjeanes在评论中添加:

  看起来每个人都错过了这个问题。
  大卫显然想要推翻他所有点文件的回购(bashrcgemrc等等。)包括他的.gitconfig所以他可以在他的所有机器上完成所有设置。 />   通过包含和忽略私人条目来推送.gitconfig文件的一部分的方法是他(以及我,就此而言)所追求的。

一种可能的方法是使用smudge/clean filter driver解密/加密一个带有私有敏感信息的文件(参见this thread),以便用解密的方式完成像〜/ .gitconfig这样的本地文件与该文件相关的部分。

通过这种方式,你可以拥有一个包含所有点文件的Git仓库,以及一个带有加密信息的文件,用于解密并添加到所述点文件中。

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

(a GPG-based solution表示当然,您已将您的私钥/公钥通过其他方式传送到目标计算机上,您希望通过克隆此特殊仓库来恢复所有点文件。

实际上,在您的情况下,需要完成涂抹脚本,在解密该文件后,继续将相关部分添加到您的全局~/.gitconfig文件(除非you overwrite the global config file with another location)或其他点文件。

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg的不便之处在this thread中进一步讨论) (这与完全加密的Git仓库不同,为discussed here

答案 2 :(得分:7)

您可以从命令行加载它:

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

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

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

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

答案 3 :(得分:2)

我相信您可以使用defunkt's hub tool完成此操作。这是git命令的包装器,除其他外,它允许您拥有GITHUB_USERGITHUB_TOKEN环境变量。这将覆盖本地.gitconfig文件中的设置。

然后,在用户ZSH config中指向别名alias git=hub的用户无缝。然后,您应该能够在您设置环境变量的地方找到一个本地文件,并将您的存储库推送到公共世界,并提供所有私人信息。

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