将SVN回购的部分复制到另一个

问题描述:

有没有可以将特定文件或目录从一个回购站复制到另一个回收站(都是远程的)的任何工具(或者svnsync可以这样做,我认为不可以)?将SVN回购的部分复制到另一个

我想为代码库提供只读仓库,但只提供该库的一个子集,而不是整个项目。

谢谢。

如果你不介意弄脏你的手,你可以编写一个脚本来导出私人项目的文件,并将svn-clean-files提交给你的公共项目。

这种方式即使svn在公共项目上的差异可能尽管这不同于原始的svn历史。但那很好,因为它不是有意的。

像这样的cron工作?

#!/bin/bash 

EXPDIR=$(mktemp -d /tmp/projectXXXXXX) 

svn export --force svn+ssh://[email protected]/repository/project/sub/ $EXPDIR/ 
svn add $EXPDIR/ svn+ssh://[email protected]/repository/subpart/ 
cd $EXPDIR/ 
svn ci -m "update `date`" $EXPDIR/ 

#cleanup 
rm -rf "/tmp/$EXPDIR" 

我建议您使用externals definitions作为解决方案。为代码库的只读子集创建新的存储库,并将其映射到项目的子文件夹。

+0

麻烦的是,任何有权访问外部属性的人都可以使用它访问所有源代码回购。我想让源代码保持私有状态(实际上没有能力更改任何用户/权限),但是在第二个回购站中公开提供一个小子集。 – 2010-11-29 12:49:16

+0

@Jack Sleight,如果你不能改变任何权限你想如何限制对只读存储库的访问?我的意思是,即使你找到了解决方案,每个人仍然可以在你的“私人”存储库中更改文件。 – bniwredyc 2010-11-29 13:10:50

+0

我可以在目标/公共/只读仓库上设置权限,而不是在没有公共权限的私人仓库中设置权限。 – 2010-11-29 13:18:27

虽然@ initall的解决方案是可行的,但您会丢失历史记录信息等。我建议您使用svnsync,正如您建议的那样。

由于1.5 svnsync只能同步源回购的子树,因此我认为这是一个更清洁的解决方案,您可以在每个回购中拥有不同的访问权限。有关详细信息,请参见svn手册中的repository replication部分。