2012-06-29 59 views
41

我有一个shell变量指向我的所有配置文件所在的目录。我们假设该变量是使用export RC=$HOME/rc创建的。我在配置目录中有一个全局忽略文件:~/rc/globalgitignoregit config中的shell变量扩展

我的问题是,我该如何扩展我的.gitconfig文件中的RC变量?

我已经试过如下:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

这些解决方案都不起作用。

如果我输入完整路径:excludesfile = ~/rc/globalgitignore,这将工作的唯一方法,但如果将rc目录移动到其他位置,则必须更改路径。

回答

32

你不能。 git-config(1)不支持的环境变量扩展,但只有有限的类型转换和路径扩展:

类型说明符可以是--int或--bool,使GIT中的配置确保变量(多个)的给定类型并将值转换为规范形式(int的简单十进制数,bool的“true”或“false”字符串)或--path,它会执行一些路径扩展(请参阅下面的路径) 。如果没有通过类型说明符,则对该值执行没有检查或转换的

--path状态的文档:

--path

混帐配置将扩大导致〜至$ HOME的值,并〜用户的主目录指定用户。这个选项在设置值时不起作用(但是你可以在命令行中使用git config bla〜/让shell执行扩展)。

术语“扩展”未出现在git-config(1)的任何不同上下文中。那么你是怎么得到这个想法的,因为没有这样的特征被记录在任何地方?

为了扩展环境变量,您必须自己预先处理Git配置文件,即通过创建模板文件,并在将文件复制到$HOME目录之前使用脚本展开变量。

如果是关于点文件管理,那么做,所有人都做:把它们放在一个目录中,并从你的$HOME添加符号链接到这个目录。

+0

以前我挂在'rc'目录中的所有配置文件到我的主目录。为了省略这些链接,我创建了'RC'变量,并且大部分程序都使用它。 顺便说一下,'〜'是扩展的,当你使用git config别名...那么你可以使用shell命令行和变量扩展。 – SvenK

+3

@SvenK:请阅读'git-config(1)':'git-config(1)'展开'〜'不是“自动地”意味着支持变量扩展甚至shell命令。 '〜'是'git-config'专门处理的,当且仅当一个值是用'--path'类型说明符*检索的。这是'git-config'支持的* only *类型的扩展。我已经更新了我的答案,以包含'git-config(1)' – lunaryorn

+2

的相关部分,这有点令人沮丧,因为我不能只为我的整个系统指定我的http [s]?_ proxy环境变量;我不得不由于某种原因在我的gitconfig中指定它。对于不在家工作或小型开发商店工作的人员和/或根据他们工作的地点坐在不同网络上的人很烦人。 –

15

我在我的配置中使用bash脚本来启用可变扩展。只是出口您在你的.bashrc需要的变量,并用它在脚本:

在我的〜/ .bashrc:

export TESTVARIABLE="hello" 

在我的〜/的.gitconfig:

[alias] 
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"' 

在我的bash提示:

bash> git test 
    Value: hello 

钍另一种方法是在你的shell的rc中添加一个git config命令。我比如在我的.bashrc:

git config --global user.name "[email protected]$HOSTNAME" 

我对我所有的机器相同的配置,并通过添加这个我可以区分不同的机器之间的承诺。你可以做同样的,并添加到你的shell RC:

export RC="$HOME/rc" 
git config --global core.excludesfile "$RC/globalgitignore" 
+1

gospes:我尝试了您为电子邮件字段提供的第一种方法。结果的电子邮件(我在提交信息中看到)等于字符串“<!bash -c'echo -n”$ EMAIL>“。想法? – tivoni

+8

@tivoni @gospes的示例仅适用于它,因为它位于' git alias'组 –