查看最后N到M Git在vimdiff中提交

时间:2013-05-06 17:43:36

标签: git bash

这是一个单行,说明了我想做的事情:

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

如何使用阵列转速并避免硬编码?

2 个答案:

答案 0 :(得分:2)

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

所以

revs=(2 3); f=index.html; vimdiff <(git show HEAD~${revs[0]}:"$f") <(git show HEAD~${revs[1]}:"$f")

答案 1 :(得分: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 4翻译为multiDiff index.html 2 3 4

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

如果git处理中有一些错误,抱歉 - 我目前没有git repo来练习。希望那些帮助。