首页 > 解决方案 > 处理引用多个 SVN 存储库的项目

问题描述

我们有几个项目存储在一个存储库中(我们称之为存储库 A)。

存储库 A 中的一些项目使用在另一个存储库(我们称之为存储库 B)中受源代码控制的文件。

这种关系永远不会反过来(代表 B 不使用代表 A 的文件)

现在,我们处理这些文件的方式是将它们保存在两个存储库中,有时我们会有人将 B 中文件的更改合并到 A。

例如:在存储库 A 中:/tools/trunk/tool_A/main.cpp /tools/trunk/tool_A/secondary_screen.cpp ... /tools/trunk/tool_A/extra/Libraries/bob/bobs_magic_handler.h /tools/trunk /tool_A/extra/Libraries/frank/frank_tools.h

在存储库 B 中:/libraries/trunk/bob/bobs_magic_handler.h /libraries/trunk/bob/bobs_magic_handler_another_one.h ... /libraries/trunk/frank/frank_tools.h

B中的文件数量很大(几万),而A从B中使用的文件数量很少(几十)

理想情况下,我认为有办法将信息存储在 repo A 中,即

repoA::/tools/trunk/tool_A/extra/Libraries/bob/bobs_magic_handler.h

应始终从

repoB::/libraries/trunk/bob/bobs_magic_handler_another_one.h

这样,想要在 repoA 上工作的开发人员只需从 A 获取整个项目,并在您无法访问 repoB 时收到通知。如果您在从 repoA 获取这些文件时无法更新这些文件,那就更好了。

似乎这将是一个古老的问题。即如何处理从多个存储库中提取文件的项目。

标签: svnsvn-externals

解决方案


我在同一案例中找不到我之前的答案,请尝试在此处重复

  1. 阅读(仔细)关于SVN Externals的内容,记住并理解两种类型的 externals(基于目录的和基于文件的)及其特有的属性:dir-externals 可以跨存储库链接,file-externals 只能具有源和目标位置同一个仓库
  2. 根据 p.1,为了获得所需的结果,您必须使用 2-chains 链接
    • 目录与repoA中外部 repo 文件中所需的所有内容链接到一些自定义永久文件中,独立于通常的 repo-tree 位置(即,如果您在 root 中有默认的trunk+branches+tags,您可以在 root 中添加类似“/Shared”的内容并将所有来自 repoB 的文件夹作为其中的子文件夹)
    • 将 repoA 工作树中的所有真实共享文件替换为“/Shared/SharedDir/file”中这些文件的外部文件
    • 修改|在 authz 文件中添加规则,以防止将 repoA 共享文件中的更改提交到存储库(通常情况下,它在工作副本文件中启用和编辑必须作为提交的一部分提交到它的原始位置 / 到 RepoB 作为最终结果/)

示例文件的说明

repoA::/tools/trunk/tool_A/extra/Libraries/bob/bobs_magic_handler.h

它的起源

repoB::/libraries/trunk/bob/bobs_magic_handler_another_one.h

因为bobs_magic_handler.h如果文件来自另一个存储库,您必须从 repoA 链接到它在 RepoB 中的父目录。即得到,fe“repoA::/Shared/bobtrunk/”,它将包含来自“repoB::/libraries/trunk/bob/”和“repoA::/Shared/bobtrunk/bobs_magic_handler_another_one.h”的所有内容。全部

在第二步中,您必须通过链接到“repoA::/Shared/bobtrunk/bobs_magic_handler_another_one.h”来替换文件“repoA::/tools/trunk/tool_A/extra/Libraries/bob/bobs_magic_handler.h”,保留原始名称目标存储库中的文件“bobs_magic_handler.h”(不是“bobs_magic_handler_another_one.h”)(可能分别在两个提交中 - 删除真实文件,添加外部文件 - 我现在不记得过程的细节)


推荐阅读