如何在.gitconfig中创建临时变量?

如何在.gitconfig中创建临时变量?,git,Git,有时,我在别名的参数列表中有一个长and字符串;例如,diff highlight的完整路径,或者一个非常长且令人困惑的漂亮格式字符串 我想将这些字符串放在一个临时变量中,这样我就可以执行如下操作,我发现这比内联可读得多: [alias] FMT_OF_DEATH="somethinghideouslylongandunreadable" hist = log --pretty=format:$FMT_OF_DEATH --graph --date=short 我可以这样做吗?

有时,我在别名的参数列表中有一个长and字符串;例如,diff highlight的完整路径,或者一个非常长且令人困惑的漂亮格式字符串

我想将这些字符串放在一个临时变量中,这样我就可以执行如下操作,我发现这比内联可读得多:

[alias]
    FMT_OF_DEATH="somethinghideouslylongandunreadable"
    hist = log --pretty=format:$FMT_OF_DEATH --graph --date=short

我可以这样做吗?如果可以,怎么做?

[p>[Edit]请参见下面的详细信息,但事实证明,对于-pretty=format,它早在Git版本1.7.10中就已经内置了

给定-pretty=format:name,git log将在[format]部分查找该名称。因此,您只需要运行git log-pretty=format:death-graph-date=short,将您的死亡格式设置为format.death。名称也会递归展开,因此您可以在配置中指定format.death=format.death1 format.death2,format.death1和format.death2将展开为%。。。指令和任何您喜欢的文字字符串

但是,对于那些不是格式化字符串的东西,您仍然必须以艰难的方式来完成

艰难的道路 为此,您必须调用shell并让shell调用git config-get或等效程序来扩展内部部分。因此,您需要小心外壳是否也会扩展任何外部部件。幸运的是,有了Git,很多东西都不会被吃掉。对于其他工作类似的程序来说,情况并非总是如此。因此,继续使用格式思想,您可能希望其他命令有所不同:

[format]
    death = somethinghideouslylongandunreadable   
[alias]
    hist = !git log "--pretty=format:"\"$(git config --get format.death)\" \
      --graph --date=short
请注意,这可能更灵活,因为您可以对任意多的致命格式进行预编码,然后使用命令行参数选择一种格式。但是,此时别名本身变得非常复杂,您可能只想将其作为shell脚本编写,您可以使用git sh setup及其各种功能:

[format]
    death1 = ...
    death2 = ...
加上:

在$PATH中的某个地方使用这个脚本,您可以运行git hist foo以获得format.foo格式的输出。您可以使用git hist foo-date=long zorg覆盖-date和log from分支zorg,以此类推

但既然它都是内置的,你最好用简单的方法来做

#! /bin/sh
# git-hist: run git log with --pretty=format:<fmt> where <fmt>
# is extracted via "git config --get format.whatever", where
# the "whatever" part is an argument

USAGE="which-format [args passed through to git log]"

. git-sh-setup

case $# in
0) usage;;
*) fmt=$(git config --get format."$1") ||
     die "hist: no \"format.$1\" found (check git configuration)"
   shift;;
esac

exec git log --pretty=format:"$fmt" --graph --date=short "$@"