我想在我的.gitconfig中包含一个文件,它有我的github设置-这是可能的吗?
我可以这样做吗?
[core]
include = /path/to/file
我想在我的.gitconfig中包含一个文件,它有我的github设置-这是可能的吗?
我可以这样做吗?
[core]
include = /path/to/file
当前回答
我相信您可以使用defunkt的hub工具来实现这一点。这是git命令的包装器,它允许你拥有GITHUB_USER和GITHUB_TOKEN环境变量。它将覆盖本地.gitconfig文件中的设置。
然后,为了使它无缝,你指向的用户别名git=hub在他的ZSH配置。然后,您应该能够获取一个本地文件,在其中设置环境变量,并将存储库与您的所有私有信息巧妙地推向公共世界。
**注:对于OSX上的自酿用户,您可以通过brew install hub安装该工具。
其他回答
2012年更新:
请看Mike Morearty的回答:
包括
You can include one config file from another by setting the special include.path variable to the name of the file to be included. The included file is expanded immediately, as if its contents had been found at the location of the include directive. If the value of the include.path variable is a relative path, the path is considered to be relative to the configuration file in which the include directive was found. The value of include.path is subject to tilde expansion: ~/ is expanded to the value of $HOME, and ~user/ to the specified user's home directory.
我不这么认为。
我宁愿把这个设置放在~/中。gitconfig文件
用户特定的配置文件。也称为“全局”配置文件。
这样,它就完成了.gitconfig项目特定文件,而不会在推送到GitHub时发布。关于全局配置文件的更多信息,请参见这个SO答案。 Git有3个配置文件。
Bjeanes在评论中补充道:
似乎每个人都没有抓住这个问题的重点。 David显然想要恢复他所有的点文件(bashrc, gemrc等),包括他的.gitconfig,这样他就可以在他的所有机器上拥有他的所有设置。 通过包含和忽略私有条目来推送.gitconfig文件的部分内容是他(和我)所追求的。
一种可能的方法是使用一个smudge/clean过滤器驱动程序来解密/加密一个包含私有敏感信息的文件(参见这个线程),以完成一个像~/这样的本地文件。Gitconfig和与该文件相关的解密部分。
通过这种方式,您可以拥有一个包含所有dot文件的Git repo,再加上一个包含加密信息的文件,该文件将被解密并添加到所述dot文件中。
在.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的解决方案意味着,你已经通过另一种方式将你的私钥/公钥传递到目标计算机上,你想通过克隆这个特殊的repo来恢复你所有的点文件)
实际上,在您的情况下,需要完成涂抹脚本,因为它必须在解密该文件后继续并将相关部分添加到全局~/。Gitconfig文件(除非您用另一个位置覆盖全局配置文件)或其他点文件。
https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg带来的不便将在本帖中进一步讨论) (这与完全加密的Git回购是不同的,正如这里讨论的那样)
你可以从命令行加载它:
$ git config --local include.path "/path/to/.gitconfig"
使用“$ PWD”/。如果您想从当前目录加载文件,则使用Gitconfig。
运行上述命令后,将以下行添加到您的.git/config文件中:
[include]
path = /path/to/.gitconfig
我相信您可以使用defunkt的hub工具来实现这一点。这是git命令的包装器,它允许你拥有GITHUB_USER和GITHUB_TOKEN环境变量。它将覆盖本地.gitconfig文件中的设置。
然后,为了使它无缝,你指向的用户别名git=hub在他的ZSH配置。然后,您应该能够获取一个本地文件,在其中设置环境变量,并将存储库与您的所有私有信息巧妙地推向公共世界。
**注:对于OSX上的自酿用户,您可以通过brew install hub安装该工具。
Git(1.7.10+)现在在.gitconfig中支持这种语法:
[include]
path = /path/to/file
这里有git更改及其边缘情况的详细描述。
顺便说一下,有几个细微之处值得指出:
Environment-variable expansion, e.g. $HOME, is not supported. (Expansion of ~ appeared in Git 1.7.10.2.) If a relative path is specified, then it is relative to the .gitconfig file that has the [include] statement. This works correctly even across chained includes -- e.g. ~/.gitconfig can have: [include] path = subdir/gitconfig and subdir/gitconfig can have: [include] path = nested_subdir/gitconfig ... which will cause subdir/nested_subdir/gitconfig to be loaded. If git can't find the target file, it silently ignores the error. This appears to be by design.