Svn回购同步

时间:2009-03-11 10:38:53

标签: svn version-control synchronization replication

我想在我的SVN回购中保留第三方代码的副本。 (所以我可以运行报告和测试)

我怎样才能将某个文件夹/路径从他们的仓库同步到我的?

显然,我不能只是从他们的仓库进行出口并承诺我的,因为这会错过删除。

自动化解决方案的额外酷点。

svn:可以使用外部,但不是理想的。如果第三方回购已关闭,我将无法访问该代码。

谢谢,

4 个答案:

答案 0 :(得分:3)

如果第三方代码驻留在SVN仓库中,您可以使用svn:externals属性。

答案 1 :(得分:2)

我使用svk完成此操作。

mirroring and svn repo with svk上有一些文件,但不是很好;也许这个程序的总结会有所帮助。

  1. 如果您不希望将其置于主目录下的默认位置,请将SVKROOT环境变量设置为svk repo的相应路径。请注意,这将包含您使用svk所做的一切,包括多个svn repos的镜像,因此它可能会变得非常大。

  2. svk init初始化回购。系统会询问您是否要初始化它(如果它尚不存在)。您可能还会收到错误消息,“命令无法识别,请尝试/ usr / bin / svk帮助。”;这似乎是一个无害的错误。

  3. 设置镜像,提供要镜像的repo的路径,以及svk repo中要放置镜像的路径,例如:

    svk mirror sv + ssh://foo.com/data/repo/head/project //mirror/foo.com/project svk mirror sv + ssh://bar.com/data/repo/head/funstuff //mirror/bar.com/funstuff

  4. 运行svk sync -a以同步所有镜像。只要您想要将副本从镜像存储库更新到最新版本,就会运行此命令。

    如果您第一次收到有关Time :: Progress模块​​丢失的错误,那么您可能正在使用最新版本的Fedora,Ubuntu或其他版本的svk包。这有一些workarounds;我只是sudo cpan Time::Progress从CPAN中获取了我需要的东西。

  5. 执行svk co /mirror/foo.com/project以结帐项目。当然,您将拥有完整的历史记录和其他所有内容,只需使用svk命令而不是svn命令。

答案 2 :(得分:0)

我在想svk可能会这样做。您可以为源和目标存储库设置镜像,并有两个签出指向同一位置。

然后从源存储库中拉出并推送到目标......或类似的东西。

你应该能够通过cron作业运行的shell脚本自动化它。

答案 3 :(得分:-1)

您应该使用某些DVCS工具(例如Mercurial(使用hgsubversion或hgsvn)或Git(git-svn))制作SVN的镜像。