【问题标题】:Synchronize a SVN repository and later make it independent (copy a repository)同步一个 SVN 存储库,稍后使其独立(复制一个存储库)
【发布时间】:2011-06-12 06:18:52
【问题描述】:

我正在使用 svnsync 在两个系统之间同步一个 SVN 存储库,我不能 100% 确定在同步完成后它是否可以独立于我的“新用户”。

我需要做什么才能使其成为一个完全独立的实体?只修改passwd文件就够了吗?

【问题讨论】:

    标签: svn repository svnsync


    【解决方案1】:

    我需要做什么才能使其成为一个完全独立的实体?

    新存储库和原始存储库之间的唯一链接是svnsync synchronize 使用的许多修订属性。您可以像这样安全地删除它们:

    svn propdel --revprop -r 0 svn:sync-from-uuid http://svn.example.com
    svn propdel --revprop -r 0 svn:sync-last-merged-rev http://svn.example.com
    svn propdel --revprop -r 0 svn:sync-from-url http://svn.example.com
    

    除了确保svnsync synchronize 不能再运行之外,这并没有多大作用。

    edit:只是想到了别的东西。您可能在项目中使用了svn:externals 属性来指向另一个存储库,或同一存储库中的另一个位置。

    一个应该使用relative URL syntax作为同一存储库中的链接,在这种情况下没有问题。但是,如果为此使用了绝对 URL,那么这些链接将在 svnsync 之后继续指向原始存储库。您可以像这样检查所有svn:externals 属性(可能需要一段时间,递归扫描所有文件夹):

    svn propget -R svn:externals http://svn.example.com/
    

    【讨论】:

    • 知道如何更正现有修订版中的svn:externals 属性吗?
    • @STATUS_ACCESS_DENIED:SVN 中缺少一种简单地为现有修订重新映射外部 (like in mercurial) 的方法。通过重写历史记录(svnadmin dump 整个存储库,搜索并替换 URL,然后在新的 repo 中 svnadmin load)可能仍然是可能的,但这是另一回事。我从未尝试过。
    • 使 svn:externals 独立于存储库位置更改的一个好方法是使用“^/../REPO-NAME”引用。这意味着“无论此存储库在什么父路径上,都使用 REPO-NAME。”因此,如果将来您更改了彼此链接的存储库的主机、路径或协议,它们将在更改前后继续工作,直到您开始使用此技术。
    【解决方案2】:

    基本上,您需要 apache 配置:

    • 使用不同的 URL 和不同的 AuthName 引用新的 repo
    • 在上述新仓库的conf/authz 文件中声明您的新用户。
    • 声明他们的密码(如果你使用的是:q!AuthType Basic认证模式)

    不强制使用不同的密码:一旦两个存储库使用两个不同的地址(在同一个 apache 或两个不同的 'apache' 下)管理,它们将相互独立。

    【讨论】:

    • 认为 源使用 Apache 类型设置,而在目标我使用 svnserve over SSH(根据 svnbook.red-bean.com/en/1.5/…
    • @matt74m:所以认证机制会不同,地址也会不同。这两个存储库将是相当独立的(除非您需要定期重新同步它们)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2023-04-09
    • 2022-06-16
    相关资源
    最近更新 更多