使用SVK创建SVN存储库的只读镜像
说,你有一个SVN为您的OpenSource项目,并希望将其镜像到一些远程位置承载开源项目(如SourceForge.net或dev.java.net)。 我将跳过一个帐户和项目注册阶段,并假设您已经获得了凭据和SVN报告网址。 我也假设你在Debian或Ubuntu上,你的SVN在Apache httpd下运行。
默认情况下,有一个名为svnsync的工具,默认情况下是为了完全相同的目的而设计的,但是在这种情况下有一件事情阻止我们使用它。 它需要一个自定义的svn钩子来呈现在目标存储库上,这在我们的案例中是不可能自定义的。
你所做的是先安装SVK:
# aptitude install svk
粗略地说,SVK是SVN的超集,因此允许一些高级技巧,如repo同步。 有一个版本控制与SVK书你可以参考一个深入的SVK指南。 我会保持简短。 这个概念是您创建一个SVK仓库(“仓库”),其中包含所有涉及的SVN回报的副本(您的主要回购站和转储信息的副本),然后同步这些副本。
由于我们希望每次提交时都会同步回馈,因此SVN钩子过程将被使用,在我们的情况下会发生在apache httpd用户下。
所以,为了使事情变得简单,让我们登录该帐户并执行所需的例程。
# su www-data
现在我们需要做的是初始化默认仓库。
$ svk depotmap
编辑路径以指定要存储仓库的位置。 我会选择/ var / opt / svk / local
。
现在,您可以创建至少2个镜像:一个用于本地备份,一个用于远程镜像(没有任何可以防止有多个镜像):
$ svk mirror //local file:///var/opt/svn
这就是我们将repo位置(名为“local”)直接映射到svn存储库所在的文件系统位置的方式。
$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject
远程回购也是如此,在这种情况下托管在SourceForge.net上。 您需要永久接受证书并提供用户名和密码以进行缓存。
由于远程回购将是只读的,我们只会将其同步一次
$ svk sync //remote
然后执行稍后由提交后
脚本执行的操作。
$ svk sync //local
$ svk smerge --baseless --incremental --verbatim //local //remote
后一个命令将同步本地repo与远程保留所有提交详细信息。
为了在完成对本地repo的提交后自动完成此操作,请在本地SVN repo的钩子目录中创建一个名为post-commit
的文件,并将这些命令放入其中。 使其可执行
$ chmod +x ./post-commit #considering you are in the ''hooks'' dir
就这样,看看吧。
<请注意,该教程是由>创建的
Alex Yanchenko,www.centricware.org