这里没有“好”的答案,但我认为应该区分包含 1 或 2 个项目的 SVN 存储库和包含 100 个项目的其他存储库。
我维护了一个从 VSS 迁移的 SVN 存储库,其中有数百个“项目”,没有一个是按照主干/分支/标签结构组织的(事实上,我认为这种结构在我之后确实是不必要且无益的) SVN 已经使用了一段时间,当您必须将 2 或 3 个项目标记为单个更改时,它肯定无济于事)。
我们为所有维护的软件维护一个项目目录,在该目录下我们有用于配置的子目录和用于源的另一个目录。在那些我们有产品版本号的情况下——我们实际上抛弃了主干的概念,我们只有标签目录——最大的数字是主干(我们必须这样做,因为我们必须同时支持多个版本的项目)。合并根据需要进行,所以如果我更新项目 A 3.0 版中的错误;我会将这些更改合并到版本 4.0 和 v5.0。
如果我只用 1 或 2 个项目进行回购,我可能会想保留分支/标签结构,但另一方面 - 我可能会在主树中保持目录显式(假设我没有经常发布以定期标记)(我将修订号用作“标记”顺便说一句,并将二进制文件存储在其中。因此,如果我需要获取特定的旧修订版,我可以通过查看日志来获取正确的二进制文件)
考虑到我有一个 10Gb 的存储库,其 revnum 目前已超过 300,000,其中包含许多旧代码以及更新的代码,因此管理起来非常容易。我会向其他人推荐该结构并将再次使用它。
顺便说一句,标签 dir 对我们不起作用的另一个原因是因为每次有错误或更改请求时我们都会发布,无论多么微小。一段时间后,我们的标签目录将无法管理,这就是我们使用 revnum 作为标签的原因 - 我们可以将它与错误跟踪器相关联,以使其更具人类可读性。
所以粗略地总结一下,我们有一个这样的目录结构,其中 v1 和 v2 是产品版本:
maint/source/v1.0/projectA
maint/source/v1.0/projectB
maint/source/v2.0/projectA
maint/source/v2.0/projectB
etc
显然,我们可以在“源”下放置一个分支目录,并在每个子项目下放置一个分支/标签,但是如果我们需要将 2 个子项目作为一个更改请求发布(就像我们经常做的那样),这将变得很棘手。在源目录下放置标签子目录意味着我们标记所有内容,当只有一个子项目被更改时(不符合我们单独跟踪每个子项目的要求)