需求提出
想要比较本地文件跟库中文件的不同,可以用 p4 diff file。那么该如何比较库中两个历史版本呢?比如要比较文件 A 的两个版本 m 和 n,大致有以下几种方法:
- 采用 p4 diff2 A#m A#n 来进行比较,但这样仅在屏幕上显示不同之处,不是很直观。
- 将两个版本的文件 check out 到本地并分别命名,然后用 tkdiff、meld、bcompare 等工具来比较两个文件。该方法能够左右两栏显示两个版本的区别,比方法 1 在展示效果上更直观,但是操作起来较为繁琐。若当前文件已经被 edit 了,过程就更繁琐了,还得先 revert,等比较完毕再重新 edit。
以上两种方法各有利弊,有没有展示效果好又操作比较简单的方法呢?自己写呗。
脚本特性
今天要讲的方法原理跟方法 2 类似,但不用考虑文件被 edit 的问题——借用 p4 print 来中转。思路如下:采用 p4 print 分别打印待比对文件的两个版本到本地临时文件,然后 bcompare 比对,最后删除临时文件。
脚本
脚本名为 p4_diff2.sh
,为方便使用请在~/.bashrc
里 alias p4_diff2 'sh ~/script/p4_diff2.sh'
。
#! /usr/bin/sh # File Name : p4_diff2.sh # Usage : sh p4_diff2.sh file v1 v2 file=$1 v1=$2 v2=$3 p4 print $file#$v1 > .$file.$v1 p4 print $file#$v2 > .$file.$v2 bcompare .$file.$v1 .$file.$v2 rm .$file.$v1 .$file.$v2