1

我一直在阅读带有颠覆的供应商分支。我对 subversion 命令行不太满意,我一直在 Windows 7 机器上使用 TortoiseSVN 和 Subclipse 作为 SVN 客户端。

在 Vendor Branches 的 subversion 文档中,他们讨论了如何进行“外部存储库副本”,但我无法找到如何使用 TortoiseSVN 执行此操作。当我在互联网上搜索如何使用 TortoiseSVN 执行此操作时,我发现建议使用的文章svn:externals。Vendor Branches 的文档没有说要使用svn:externals,而是说要使用外部存储库副本。

有谁知道我怎么能用 TortoiseSVN 做这样的副本?如果不可能,svn:externals会给我同样的结果吗?

编辑:

这是我的工作流程:

  1. 我在存储库中创建了一个新的根级文件夹,名为vendor. 这是 的兄弟姐妹trunk
  2. 我签出myrepo/vendor了一份新的工作副本。
  3. 我尝试two different trees使用 TortoiseSVN 从myvendorrepo/trunkto合并myrepo/vendor。这返回了一个错误,告诉我它myvendorrepo/trunk必须与myrepo/vendor.

Vendor Branch 文档专门讨论了 a foreign repository copy,但 TortoiseSVN 似乎不可能。

4

1 回答 1

2
  1. TortoiseSVN(或任何其他SVN 客户端,它的任务/部分/)存储库管理无法完成“外部存储库副本” 。并且只有在 SVN 客户端无法访问上游代码时才可用(根本没有版本化,存储在 SCM 中,SVN 客户端不理解)
  2. 您误解并误用了“2-URL 合并”(阅读svn help merge)——这种类型的合并未在供应商分支中使用,以不同的方式和不同的目标使用:svn merge URL1 URL2将合并到URL3 的 WC 中,从 URL1+URL2 独立并行更改

示例中的“外部副本”和外部供应商分支

让我们想象一下:

  • 外部代码放置在VENDOR/PATH/TO/LIBRARY
  • 我们的上游代码副本MY/VENDORS/VENDOR/LIBRARY- 在(额外的中间 /VENDORS 节点是未来的工件,当超过 1 个供应商可能出现时)
  • 本地工作发生在MY/trunk

“外文”式

  • 询问有权访问存储库文件系统的 SVN 管理员,创建完整VENDOR存储库的svnadmin dump转储并将转储传输给您,之后它仅过滤/PATH/TO/LIBRARY节点svndumpfilter
    • 另一种方法是使用svnrdump URL,它有一些好处:您可以转储任何远程存储库,您可以对其具有读取访问权限,您只能转储存储库的一部分(并消除 svndumpfilter 头痛) -svnrdump dump VENDOR/PATH/TO/LIBRARY > dumpfile
  • 准备好的(以任何方式)转储必须加载到MY存储库中:svnadmin load /PATH/TO/MY < dumpfile添加一些内容:
    • 因为它是从另一个 repo 转储的,所以不需要--ignore-uuid选项(在 not-empty 的情况下MY),但可以用于安全
    • 因为我们想将目录的挂载点从更改/PATH/TO/LIBRARY/VENDORS/VENDOR/LIBRARY附加选项--parent-dir /VENDORS/VENDOR/必须的(TBT !!!我从内存中编写父规范)

在这些操作之后,您将在本地存储库中拥有节点,这是远程节点的精确副本,但与远程无关:您必须监视远程更改并手动与您的副本同步(svn up VENDOR/PATH/TO/LIBRARY在单独的 WC 中,将更改复制到你的 WC,提交更改)

外装式

  • /VENDORS/VENDOR/在存储库中创建物理节点MY( svn mkdir --parents /VENDORS/VENDOR)
  • 将 /VENDORS/VENDOR/ 的 LIBRARY 子目录定义为外部目录(根据您的喜好,在 URL 中使用或不使用 PEG-revision - 没有将更容易维护更新 /zero operation/,但更难 /impossible/ 恢复旧的历史状态存储库,使用 PEG,您必须手动维护链接的实际性/edit PEG-revision,在需要时/,但历史总是自动正确存储),映射到 VENDOR/PATH/TO/LIBRARY

对于这两种样式,将上游集成到您的代码将只是定期合并 /VENDORS/VENDOR/LIBRARY 到主干

PS:对于 externals-syle 首先在主干中创建初始快照(如果主干为空)并首先合并到主干可能很麻烦且不明显。AFAICR,您将无法将 /VENDORS/VENDOR/LIBRARY 合并到空主干(以及svn copy):您将收到(无法回忆文本)错误并且根本没有合并|复制。无法引用正确的方法,但我只是将工作副本中的文件从供应商分支复制到主干并提交主干以便拥有 BASE,在这种情况下,首先将 LIBRARY 合并(并且仅是第一个)到主干,以便合并不相关的(对于 Subversion)节点添加--ignore-ancestry选项:以后的主干和 LIBRARY已经相关

于 2014-02-11T07:25:30.957 回答