完整的例子
这一部分介绍 SVK 的实际使用。
单独使用
假设有一个远程的版本库 http://remote/repos,用户经常需要离线的工作,则可以使用 SVK 在本地计算机上建立一个远程版本库的镜像 Depot:
svk mirror http://remote/repos //mirror/local
为此镜像做一个拷贝,所有本地工作都在这一拷贝上完成
svk cp //mirror/local //local
从本地 Depot 取出 working copy
svk co //local
在能连接到远程版本库的时候,同步远程的版本库到本地
svk sy //mirror/local
svk pull //local
当然,将 Depot 作为 Subversion 版本库发布出来以后用户便可以脱离 SVK,使用 Subversion 的客户端即可访问。这样一来,所有对版本库的工作都可以在没有网络环境的情况下进行,在将来能够连上网络的时候使用如下命令便将所有在本地的更动反映到远程版本库中去:
svk push //local
版本库同步
现今流行的 Open source 开发模式限制了 committer 的数量,并非所有用户都具有 commit 的权限。假设现有一个远程的版本库 http://remote/repos,数个用户希望能够有权限自由的 commmit,自然的,我们可以利用上述的镜像方法获得一个属于自己的版本库,但是这一版本库必须位于某台服务器上而不是某人的个人电脑上,以使得所有用户都能访问到。如果这个版本库是在一台标准的 Subversion 版本服务器上(假设 URL 是 http://myremote/repos),通常用户对此服务器只有访问 Subversion 版本库的权限,也就是说,用户无法直接在这一台服务器上安装 SVK 而做镜像。SVK 很好的解决了这一问题。我们可以使用任何一台和可以很好的连接上这两台服务器的某一台机器作为中间服务器,定时进行同步,下面是主要操作步骤。
在安装有SVK的中间服务器上进行如下操作:
svk mirror http://remote/repos //remote
svk mirror http://myremote/repos //myremote
分别同步两个 depot 的内容
svk sy //remote
svk sy //myremote
定时从 //remote 同步到 //myremote
svk smerge //remote //myremote
同时本文也提供了一个 Perl 脚本 作为示例,读者可以配置它自动运行并生成 Html 格式的 Report。
结束语
SVK 是目前唯一的分布式版本库系统,它成功的对分布式版本库领域进行了有效的探索并获得了成功,它的出现使得以往一些实现起来非常复杂的功能变的十分简单,给一些以往无法完成的操作带来了可能。如 P4,CVS 与 Subversion 版本库的同步与移植,版本库的离线访问,以及远程版本库的镜像和同步等等。期待本文能使更多的读者认识 SVK,并从中获得分布式版本管理的种种便利,使得日常工作更加完美与高效。同时也期待更多的读者与本人交流经验。
[ 本帖最后由 ooclp 于 2007-8-8 13:47 编辑 ]