【问题标题】:Svn Repo SyncingSvn 回购同步
【发布时间】:2010-10-12 15:37:13
【问题描述】:

我想在我的 SVN 存储库中保留一份第 3 方代码的副本。 (所以我可以运行报告和测试)

如何将某个文件夹/路径从他们的仓库同步到我的?

显然我不能只从他们的仓库中导出并提交到我的仓库,因为这会错过删除。

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

svn:externals 可以使用,但并不理想。如果关闭了第 3 方 repo,我将无法访问代码。

谢谢,

【问题讨论】:

  • 如果只有 svn copy 支持跨存储库操作...!

标签: svn version-control synchronization replication


【解决方案1】:

我使用svk 正是这样做的。

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

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

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

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

    svk 镜像 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】:

    我在想svk 或许能够做到这一点。您将为源存储库和目标存储库设置镜像,并让两个签出指向同一位置。

    然后只需从源存储库中提取并推送到目标......或类似的东西。

    您应该能够使用由 cron 作业运行的 shell 脚本来自动化它。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这并没有保留在他的仓库中。 svn:externals 只是在某个地方从远程仓库进行 svn 结帐的一种稍微自动化的方式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 2017-07-08
        相关资源
        最近更新 更多