SVK是一个基于subversion实现的分布式版本控制工具,是用Perl实现的,可以通过CPAN安装。subversion不是分布式的,所以如果我们没有权限的话,是无法创建分支,提交修改的。通过使用SVK可以创建一个本地的镜像,然后在本地repository上进行各种操作。SVK的另一个功能是把不同的subversion repository放在同一个SVK的repository里面,就好像是同一个repository里的分支。利用这个功能,我们可以同步不同的subversion repository。
比如说有一个subversion repository http://www.example.com/svn/,我们没有权限在上面做事情,但是我们可以建一个自己的repository——如http://localhost/svn/。我们需要让http://www.example.com/svn/trunk和http://localhost/svn/trunk保持同步,然后在localhost上创建分支,做一些实验或不可能在example.com上被允许的事情。使用SVK可以实现自动化同步两个trunk的内容。方法如下:
$ svk depotmap -i /project/ # create svk repository $ svk mirror http://www.example.com/svn /project/example/ $ svk mirror http://localhost/svn /project/localhost/ $ svk sync --all /project/ # this may take a long time $ svk smerge --baseless --incremental --verbatim /project/example/trunk /project/localhost/trunk
以上操作完成了初始镜像,之后需要定时同步,比如使用cron job:
$ crontab -e
添加下面一行(每个整点同步一次):
0 * * * * /path/to/sync.sh
sync.sh的内容如下
#!/bin/bash set -o verbose svk sync --all /project/ && svk smerge --incremental --verbatim /project/example/trunk /project/localhost/trunk