如何构建Subversion代码库的结构

8

我正在尝试找出最佳的初始结构方式来组织我们的Subversion版本库。

那么,是不是最佳实践是创建一个初始版本库,然后在每个项目下创建子版本库?

哪些版本库应该创建主干、分支等等?

此外,我听说最佳实践是不要在根级别版本库上创建主干、分支和标签文件夹?

我知道当我在另一个团队时,我们拉取了比如ProjectA,但它没有拉下主干、分支文件夹,这很好,但我不知道服务器上的结构是如何组织的。


重新标记为“svn”,而不是“tortoisesvn”,因为这是一个存储库/服务器端问题,而不是客户端问题。 - Nick Meyer
5个回答

14

如果你想在代码库中保留多个项目,我建议采用这种结构

/project1
    /trunk
    /branches
    /tags
/project2
    /trunk
    /branches
    /tags 
...

如果你想只保留一个项目,可以这样做:

/trunk
/branches
/tags

谢谢。那么如果我第一次检查 project1 的代码,我只需要从 Project1\trunk 文件夹获取 URL 并使用它,对吗? - PositiveGuy
如果你想要参与项目1,你只需要使用以下的语句svn://path.to.your.repo/project1/trunk进行检出即可。 - RaYell
我同意这个观点,这也是我们团队目前的做法。 - Mizipzor
我在我的一些项目中使用上述模型已经有几年了,我也很满意。 - RaYell
干/分支/标签结构背后的原因是什么?为什么需要它来管理版本,而不是允许svn在您需要时检出所需版本?显然我漏掉了什么,但看不到它。对于小型商店中的单个应用程序来说,这似乎过于复杂。 - Brad G.

8
为了避免未来的维护问题,除非你有大量的代码或者想要完全删除一个有大量代码的项目,否则请将所有内容放在一个仓库中。然后为每个项目创建一个目录。如果你想遵循Subversions的建议,请将“trunk”、“branches”和“tags”文件夹放在每个项目文件夹下面。

当我为一个项目创建子文件夹时,我会复制该URL,并进入本地该文件夹。那么我该如何将其与我在服务器上创建的干线文件夹连接起来,干线文件夹位于我的项目文件夹下面? - PositiveGuy
当我设置新的代码库时,我会执行以下步骤。首先,我会创建全局代码库,URL为“http://example.com/svn/”。然后将其检出到一个新的本地文件夹中,例如“example-svn”(随便取名)。现在,“example-svn”是整个代码库的工作副本。如果您想要设置主干/分支/标签文件夹,则需要在“example-svn”内创建一个名为“project1”的新文件夹,并在该文件夹内创建“trunk”、“branches”和“tags”。然后,将所有“project1”的文件粘贴到“trunk”中,右键单击“project1”并选择“添加”。提交即可。 - Nicole
在上面的示例中,如果您想要检查整个存储库(所有项目),则使用"http://example.com/svn/"。 如果您只想检查project1,则使用"http://example.com/svn/project1"。 - Nicole
当你不按照这种方式进行操作时,你会遇到哪些问题?你提到了一些问题。 - PositiveGuy
痛苦就在于你必须管理和备份多个存储库,同时为它们提供访问控制、监控等。创建新项目就意味着创建新存储库,如果你没有一个流畅的流程,那么这将变得困难 - 不是每个人都能开始一个新项目。有了单一的存储库,所有这些问题都会消失。如果你愿意接受这种工作,或者有一个框架可以轻松处理多个存储库,那么你就会获得一些额外的灵活性和可扩展性。 - Jim T
Jim关于维护问题的回答很好。我想补充一点,如果你想要完全摆脱整个项目,多个存储库可能会更好 - 如果它在自己的存储库中,你可以直接删除整个项目。如果它在一个组合存储库中,它将永远存在于你的历史记录中,占用一些空间。但正如Jim所说,使用一个存储库有很多好处,我认为这不值得代价。 - Nicole

5

我更喜欢精细化、非常有组织性、自包含的结构化代码库。这里有一张图表展示了代码库维护过程的一般(理想)方法。例如,我的代码库初始结构(每个项目代码库都应该有)如下:

/project
    /trunk
    /tags
        /builds
            /PA
            /A
            /B
        /releases
            /AR
            /BR
            /RC
            /ST
    /branches
        /experimental
        /maintenance
            /versions
            /platforms
        /releases

4

是的,它充满了信息,更容易让你感到困惑。我已经阅读过那个,但它并没有像这样提供最佳实践。 - PositiveGuy
3
我发现这让我对很多事情有了明确的理解。RaYell的答案几乎完全符合书上的建议。 - Matthew Vines

1
保持分开的仓库可以让你根据每个仓库的需求自定义备份计划和存储位置。此外,如果你偶尔需要挖掘仓库并执行一些维护或清理操作(比如说,你想要完全删除一个提交...虽然很少但可能发生),保持分开的仓库将允许你尽量减少对其他用户和其他仓库的干扰。
话虽如此 - 对于小型项目而言,这些事情通常不是很重要。我再次强烈推荐使用 主干/分支/标签 设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接