【问题标题】:Is it possible to include a file in your .gitconfig是否可以在 .gitconfig 中包含文件
【发布时间】:2010-12-06 03:27:21
【问题描述】:

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

我可以这样做吗:

[core]
    include = /path/to/file

【问题讨论】:

  • “我不想在其中包含 github 详细信息,因此我想以某种方式从外部文件中包含它们”:这正是全局配置文件的用途。在你的情况下有什么理由不使用它吗?
  • 是的,因为我想在 git 存储库中发布 .gitconfig 并且我不希望有人窃取我的 github 凭据。
  • 我不关注你:你的常规 gitconfig 文件将发布到 github,但没有任何 github 设置。为什么?因为这些将在您的 global 配置文件 (~/.gitconfig) 中,即 未推送 到您的 github 存储库。当您键入“git config”时,您看到的是 3 个配置文件(repo、全局和系统)的串联。只有 repo 配置文件被推送。另外 2 个留在本地。
  • 看来 everyone 错过了这个问题的重点。 David 显然想要推送他所有的点文件(bashrc、gemrc 等)的 repo,包括他的 .gitconfig,这样他就可以在他的所有机器上拥有他的所有设置。一种通过包含和忽略私有条目来推送部分 .gitconfig 文件的方法是他(和我,就此而言)所追求的
  • @bjeanes:正是!不过我还没有找到办法。

标签: git github


【解决方案1】:

Git (1.7.10+) 现在 supports .gitconfig 中的此语法:

[include]
    path = /path/to/file

请参阅here 了解有关 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 找不到目标文件,它会默默地忽略错误。这似乎是设计使然。

【讨论】:

  • 其实你不需要~。这是因为您的 .gitconfig 文件仍然必须驻留在 ~/.gitconfig 中,配置中的相对路径将暗示 ~...
  • ~ / $HOME 扩展实际上是 git describe --contains 4c0a89fc -> v1.7.10.2~12^2(即v1.7.10.2 或更高版本),值得注意的是 Debian 7 和 Ubuntu Quantal 将与v1.7.10.4.
  • 这是否支持 glob?例如路径 = ~/gitconfig.d/* ?
  • @Bret 不,这不支持 glob。
  • 请注意,以这种方式包含的配置不会在给出特定文件时显示(即,--global--local--file),除非用 --includes 明确告知(比如git config --global --includes --list)。
【解决方案2】:

2012 年更新:

Mike Moreartyanswer

包括

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


我不这么认为。

我宁愿把那个设置放在~/.gitconfig file

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

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


bjeanes 在 cmets 中添加:

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

一种可能的方法是使用smudge/clean filter driver 来解密/加密一个包含私人敏感信息的文件(请参阅this thread),以便使用相关的解密部分完成一个本地文件,如 ~/.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-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

【讨论】:

  • 我想在 git 存储库中发布我的基本 .gitconfig 文件,但我不想在其中包含 github 详细信息,因此我想以某种方式从外部文件中包含它们。
【解决方案3】:

您可以从命令行加载它:

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

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

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

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      相关资源
      最近更新 更多