我们的项目使用 CVS 托管代码,在把提交代码前,我们通常会创建一个 Patch,然后放到 Tracker 上做质量检查。
作为一个不会用 IDE 的程序员,Patch 一般是这样创建的:
cvs diff file1.php > file1.patch
问题是,这个命令无法处理 CVS 中不存在的文件,即新文件,诸如 Netbeans 和 Eclipse 等 IDE 都有办法为新建文件创建 Patch(因为我看到同事发的 Patch 里有 Eclipse 的标示),其实用命令行也是能实现这个功能的。
首先要下载一个叫 cvsdo 的工具,这是个 Perl 文件,下载到 /usr/bin/ 下,然后加上可执行权限就完事了。回到代码目录,执行 cvsdo add newfile.php,然后 cvs diff -uN newfile.php > newfile.patch,这样就能可以对新文件做 cvs diff 了。这个脚本的原理就是修改了 CVS/Entries,让 cvs 以为这个文件已经在 cvs 仓库里了。注意,要给 cvs diff 使用 -N 参数,这样才能输出新文件。如果嫌 cvs diff 后面跟参数麻烦,可以创建 ~/.cvsrc
cvs -q update -dPA diff -uN
这样每次执行 cvs diff 就会默认加上这些参数的。
参考:
Updated on 7th, July, 2009
补充在 Netbeans 中创建 Patch 的方法,在左边的文件树中选中修改了的文件,然后 Team -> CVS -> Export Diff Patch
Updated on 16th, July, 2009
做了一个 Archlinux 上的 PKGBUILD,名字 cvsutils,直接装上就都有啦