第34章 CVS版本库到Git的迁移
CVS是最早被广泛使用的版本控制系统,因为其服务器端的存储结构非常简单,至今仍受到不少粉丝的钟爱。但是,它毕竟是几十年前的产物,因为设计上的原因,导致其缺乏现代版本控制系统的一些必备的功能,如:没有原子提交、分支管理不便(慢)、分支合并困难(因为合并过程缺乏跟踪)、不支持文件名/目录名的修改,等等。CVS的很多用户都已经迁移到Subversion这一更好的集中式版本控制系统了。如果你还在使用CVS,那么可以考虑直接迁移到Git。
从CVS迁移到Git可以使用cvs2svn软件包中的cvs2git命令。为什么该项目的名称是cvs2svn而非cvs2git呢?这是因为该项目最早是为CVS版本库迁移到Subversion版本库服务的,只是最近才增加了CVS版本库转换为Git版本库的功能。cvs2svn将CVS转换为Subversion版本库的过程一直以稳定著称,从cvs2svn 2.1版开始,增加了将CVS版本库转换为Git版本库的功能,这无疑让这个工具更具生命力,也减少了之前CVS到Git库的转换环节。在推出cvs2git功能之前,CVS迁移到Git的路径通常是:先用cvs2svn将CVS版本库迁移到Subversion版本库,然后再用git-svn将Subversion版本库迁移到Git。
关于cvs2svn及cvs2git的更多信息,可以参考下面的链接:
http://cvs2svn.tigris.org/cvs2svn.html
http://cvs2svn.tigris.org/cvs2git.html
34.1 安装cvs2svn(含cvs2git)
34.1.1 Linux下cvs2svn的安装
大部分Linux发行版都提供cvs2svn[1]的发布包,可以直接用平台自带的cvs2svn软件包。cvs2svn从2.1版本开始引入了到Git库的转换,2.3.0版本有了独立的cvs2git转换脚本,cvs2git正在逐渐完善当中,因此请尽量选择最新版本的cvs2svn。
例如在Debian或Ubuntu下,可以通过下面的命令查看源里面的cvs2svn版本。
$aptitude versions cvs2svn
p 2.1.1-1 stable 990
p 2.3.0-2 testing,unstable 1001
可以看出Debian的Testing和Sid仓库中才有2.3.0版本的cvs2svn。于是执行下面的命令安装在Testing版本才有的2.3.0-2版本的cvs2svn:
$sudo aptitude install cvs2svn/testing
如果对应的Linux发行版没有对应的版本也可以从源码开始安装。cvs2svn的官方版本库在http://cvs2svn.tigris.org/svn/cvs2svn/trunk上,已经有人将cvs2svn项目转换为Git库。可以从Git库下载源码并安装cvs2svn,具体操作步骤如下:
(1)下载cvs2svn源代码。
$git clone git://repo.or.cz/cvs2svn.git
(2)进入cvs2svn源码目录,安装cvs2svn。
$cd cvs2svn
$sudo make install
(3)安装用户手册。
$sudo make man
cvs2svn对其他软件包的依赖如下:
Python 2.4或以上版本,但是Python 3.x暂不支持。
RCS:如果在转换中使用了—use-rcs,就需要安装RCS软件包[2]。
CVS:如果在转换中使用了—use-cvs,就需要安装CVS软件包。[3]
Git:1.5.4.4或以上的版本。之前版本的Git的git fast-import命令有Bug,加载cvs2git导出文件有问题。