Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可能有一个git配置取决于安装的git版本_Git_Config - Fatal编程技术网

是否可能有一个git配置取决于安装的git版本

是否可能有一个git配置取决于安装的git版本,git,config,Git,Config,我有一个全局.gitconfig文件,其中我定义为别名 alias.tree=log --pretty="format:%C(auto)%h %ad%d [%aN, %G?] - %s %N" --all --decorate --graph --color --date=short 然而,我的大多数系统(Debian7)上安装的git的默认版本是1.7。我对这些都很满意。但是,该别名不能按照旧版本git的定义工作 那么,在.gitconfig中有没有办法测试git--version并相应地定

我有一个全局
.gitconfig
文件,其中我定义为别名

alias.tree=log --pretty="format:%C(auto)%h %ad%d [%aN, %G?] - %s %N" --all --decorate --graph --color --date=short
然而,我的大多数系统(Debian7)上安装的git的默认版本是1.7。我对这些都很满意。但是,该别名不能按照旧版本git的定义工作


那么,在
.gitconfig
中有没有办法测试
git--version
并相应地定义别名?

没有,或者更准确地说,不是你所想的那样。您可以使用一点shell脚本。最清晰但效率最低的方法可能是编写三个别名:

[alias]
    tree = "!f() { set -- $(git --version | \
            sed -e 's/git version //' -e 's/\\./ /g'); \
            if [ $1 -eq 1 -a $2 -le 7 ]; then git tree17 \"$@\"; \
            else git tree18plus \"$@\"; fi; }; f"
    tree17 = whatever you want here
    tree18plus = whatever you want here
别名现在调用简短的shell脚本测试:此版本是1.7或更低版本(将1.7.x计算为“1.7或更低版本”),还是1.8或更高版本?如果是1.7或更低版本,则运行
git tree178
,否则运行
git tree18plus
。然后,您可以让这些别名做任何您喜欢的事情

当然,如果您要走到这一步,您最好编写一个名为
git-tree
的shell脚本,并将其放入
$PATH
(我会将它放在我的
$HOME/scripts
目录中;在这里,无论操作系统和CPU如何,我都会保存相同的脚本,而
$HOME/bin.amd64
$HOME/bin.sparc
等都包含操作系统和/或体系结构相关的二进制文件)。然后,脚本可以读取:

#! /bin/sh
#
# test git version, are we less than or equal to $1.$2?
gitvers_le() {
    local maj=$1 min=$2
    set -- $(git --version | sed -e 's/git version /' -e 's/\./ /g')
    if [ $1 -lt $maj ]; then return 0; fi # e.g., 1.x < 2.*
    [ $1 -eq $maj -a $2 -le $min ]
}

if gitvers_le 1 7; then
    git ...
else
    git ...
fi
!/bin/sh
#
#测试git版本,我们是否小于或等于$1。$2?
吉特弗斯·努勒(){
本地主要=$1分钟=$2
set--$(git--version | sed-e's/git version/'-e's/\.//g')
如果[$1-lt$maj];则返回0;fi#例如,1.x<2*
[$1-均价$maj-a$2-le$min]
}
如果是17,那么
吉特。。。
其他的
吉特。。。
fi
当您运行
git-tree
(或者任何git在标准位置找不到的以
git
开头的文件)并且在
$PATH
中有一个拼写为
git-tree
(或git-where)的可执行文件时,git将运行该文件。“前端”
git
只需解析一些通用选项,如
-c
-c
-work tree
等等,然后调用“后端”git来完成工作,并以某种方式处理这些通用选项(通常通过设置一些环境变量)


请注意,所有这些选项都会在运行时切换,如果您的管理员不断升级和/或降级您的二进制文件,这是很好的。另一种方法是执行一次设置,首先将项目四处移动(例如,在
$HOME/scripts
中重命名脚本,或重新设置
.gitconfig
别名设置)根据当前安装的内容,然后重新运行“check and shuffle”命令,这是一个单独的脚本,您可以自己编写,在管理员升级或降级二进制文件时执行所需的操作

也就是说,“开箱即用”配置是“重新配置并运行”。已经重新配置的配置是“运行”。如果配置的运行失败,您会对自己说:啊哈,我的机箱已经在我身上更改了,我需要显式重新配置。如果您从头开始重新安装,您会将自己重新设置为“开箱即用”模式,您可以在其中自动重新配置并运行

这是更有效的(没有固定的运行时测试),但需要记住在情况发生变化时如何重新配置