这很有趣,我刚刚快速阅读了设计部分,从我能收集到的内容中,通过有效地将文件单独分支到任意结构中,当你开始时你将走向一个痛苦的世界将事物合并回其原始位置(并且合并可能不会在所有文件的单个提交中完成)。
但我认为你可以做类似的事情来设计颠覆中的部分,并进行一些调整:
首先,可以使用外部对象模拟设计部分(1.6 版本允许外部对象指向文件和目录)。为此,您可以像这样设置项目层次结构:
/project1
/trunk
/doc
/design1
/release2
/src
/subproject1
/subproject2
/tags
/branches
/parts
/part1
/part2
/part3
每个部件文件夹将仅包含一个“svn:externals”属性,该属性将该部件的适当文件引入适当的子位置,例如:
svn:externals
../../trunk/src/subproject1 src/subproject1
../../trunk/doc/release2 doc/release2
然后,您检查零件,而不是主干,您会得到一个工作副本,其中仅包含零件定义的结构中所需的文件,当您提交时,您将直接进入主干 - 此处不需要合并。
您还可以通过首先分支整个主干(便宜且快速),然后更改您的部件外部以指向分支而不是主干来为您的部件设置基线。这不会增加存储库的大小,并且您的工作副本保持完全相同的结构,您只是从分支而不是主干获取所有文件。对该部分的任何更新也会违反分支 - 合并该部分的更改只是将分支重新集成到主干的沼泽标准重新集成合并,这是标准的 svn 实践。
管理部件的定义变得更加有趣,因为在上面的方案中,每个部件都是手动定义的,它们不是分层的。您需要某种形式的脚本(可能是 makefile),它知道部件层次结构并给定部件名称,可以构建适当的外部定义,然后可以将其应用于部件目录。
因此,虽然 subversion 没有显式地提供部件的抽象层,但它可以相当准确地手动建模——您只受 svn:externals 的功能和用于管理它们的脚本的限制。