这很有趣,我刚刚对设计部分进行了快速阅读。据我所知,通过将文件有效地分支到任意结构中,当您开始将它们合并回其原始位置时,您将会面临很多痛苦(并且合并可能不会在所有文件的单个提交中完成)。
但我认为您可以通过一些调整在Subversion中完成类似设计部分的事情:
首先,可以使用 externals(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
您可以选择检出部分而不是trunk,以获取仅包含您想要文件且结构符合该部分定义的工作副本,提交时会直接进入trunk,无需合并。
您还可以通过首先创建trunk的分支(便宜快捷),然后将您的部分外部指针指向分支而不是主干来将您的部分基线化。这不会增加存储库的大小,您的工作副本保持完全相同的结构,只是从分支而不是trunk源所有文件。对该部分的任何更新也会针对该分支 -将更改合并到该部分只是将分支重新集成到trunk的标准svn实践。
管理部件的定义变得更有趣了,因为在上述方案中,每个部分都是手动定义的且它们不是分级的。您需要某种形式的脚本(例如makefile),该脚本知道部分层次结构并给定部分名称,可以构建适当的外部定义,然后应用于部分目录。
因此,尽管Subversion没有明确提供部分的抽象层,但可以手动模拟得非常准确-您只受svn:externals和您用于管理它们的脚本的能力限制。