cvs diff的展现力太寒酸了,一直想着用vimdiff/gvimdiff取而代之,在网上搜索到一个shell脚本
cvsvimdiff,这个脚本没发比较cvs repository里的两个不同的版本,只能比较当前文件与某一个版本的不同,简单修改了一下,让这个脚本可以比较一个文件的任意两个版本,把脚本贴在这里:
#!/bin/bash
#
# Copyright (C) 2005-2006,
# Stefano Zacchiroli <zack@cs.unibo.it>
# Enrico Tassi <tassi@cs.unibo.it>
#
# This is free software, you can redistribute it and/or modify it under the
# terms of the GNU General Public License version 2 as published by the Free
# Software Foundation.
#
vimdiff="vimdiff"
suffix="vimcvsdiff"
rev1="HEAD"
if [ "$1" == "-g" ] ; then
vimdiff="gvimdiff -f"
shift 1
fi
if [ "$1" == "-r" ]; then
rev1="$2"
shift 2
fi
if [ "$1" == "-r" ]; then
rev2="$2"
shift 2
fi
files="$1"
if [ -z "$files" ]; then
files=$(cvs -n update -r HEAD 2> /dev/null | grep -e "^[MU]" | cut -c 3-)
fi
for f in $files; do
if ! [ -f $f ]; then break; fi
patch=`mktemp $prefix.XXXXXX`
orig=`mktemp $prefix.XXXXXX`
trap "rm -f $patch $orig" EXIT
if ! [ -z "$rev2" ]; then
tmp1=$f.$rev1
tmp2=$f.$rev2
cvs up -p -r $rev1 $f > $tmp1
cvs up -p -r $rev2 $f > $tmp2
$vimdiff $tmp1 $tmp2
rm -f $tmp1 $tmp2
else
cp "$f" $orig
cut -d '/' -f 2 < CVS/Entries | grep "^$f/$" > /dev/null || break
cvs diff -r $rev1 -u "$f" > $patch
if ! [ $? -eq 1 ]; then break; fi
cp "$f" $orig
patch -R -p0 $orig $patch
$vimdiff $orig $f
fi
done
下面这一段是我加的,丑陋是丑陋了一点,但能工作,:)
tmp1=$f.$rev1
tmp2=$f.$rev2
cvs up -p -r $rev1 $f > $tmp1
cvs up -p -r $rev2 $f > $tmp2
$vimdiff $tmp1 $tmp2
rm -f $tmp1 $tmp2
使用方法:
cvsvimdiff -r ver1 -r ver2 file_name