这是一个单行,说明了我想做的事情:
revs=(2 3); f=index.html; vimdiff -d <(git show HEAD~2:"$f") <(git show HEAD~3:"$f")
如何使用阵列转速并避免硬编码?
答案 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来练习。希望那些帮助。