Sync subversion repositories with SVK

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据