用vimdiff查看cvs管理下的不同版本

cvs diff的展现力太寒酸了,一直想着用vimdiff/gvimdiff取而代之,在网上搜索到一个shell脚本 cvsvimdiff,这个脚本没发比较cvs repository里的两个不同的版本,只能比较当前文件与某一个版本的不同,简单修改了一下,让这个脚本可以比较一个文件的任意两个版本,把脚本贴在这里:

#!/bin/bash
#
# Copyright (C) 2005-2006,
#   Stefano Zacchiroli  
#   Enrico Tassi    
#
# 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

你可能感兴趣的:(项目管理,cvs,脚本,up,patch,shell,file)