0

这是一个说明我想做的单行:

revs=(2 3); f=index.html; vimdiff -d <(git show HEAD~2:"$f") <(git show HEAD~3:"$f")

如何使用数组 revs 并避免硬编码?

4

2 回答 2

2

您可以使用${array_variable[index]}. bash 中的数组索引从 0 开始。

所以

revs=(2 3); f=index.html; vimdiff <(git show HEAD~${revs[0]}:"$f") <(git show HEAD~${revs[1]}:"$f")
于 2013-05-06T18:24:13.843 回答
1

我前段时间写了一个函数来比较 SVN 中的存储库 - 基本上目标是“将 repo 版本写入文件,然后打开 vim diff,然后删除文件”

function diff(){
    file=${!#}
    tmpfile=/tmp/repo/${!#}
    mkdir -p `dirname $tmpfile`
    svn cat $@ > $tmpfile
    vimdiff $file $tmpfile
    rm -rf /tmp/repo/
}

我不习惯 git,但这里有一个想法:

function multiDiff(){
    fname=$1
    shift
    files=""
    while (( "$#" ))
    do
        tmpfile="/tmp/repo/$1/$fname"
        mkdir -p `dirname $tmpfile`
        git show HEAD~$1:$fname > $tmpfile
        files="$files $tmpfile"
        shift
    done
    vimdiff $files
    rm -rf /tmp/repo
}

该函数将每个文件的版本保存到临时目录,然后对所有文件进行比较。它会被调用multidiff index.html 2 3 4 你甚至可以写一个方便的函数来做序列:

function multiDiffSeq(){
    multiDiff $1 `seq $2 $3`
}

这将转化multiDiffSeq index.html 2 4multiDiff index.html 2 3 4.

此配置的最大优点是保留了文件的扩展名,这意味着保留了您的语法突出显示。

如果 git 处理中有一些错误,对不起 - 我目前没有 git repo 可以练习。希望那些帮助。

于 2013-05-06T18:07:56.373 回答