这是一个说明我想做的单行:
revs=(2 3); f=index.html; vimdiff -d <(git show HEAD~2:"$f") <(git show HEAD~3:"$f")
如何使用数组 revs 并避免硬编码?
您可以使用${array_variable[index]}
. bash 中的数组索引从 0 开始。
所以
revs=(2 3); f=index.html; vimdiff <(git show HEAD~${revs[0]}:"$f") <(git show HEAD~${revs[1]}:"$f")
我前段时间写了一个函数来比较 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 可以练习。希望那些帮助。