Svn Subversion中发布和项目的良好存储库布局是什么?

Svn Subversion中发布和项目的良好存储库布局是什么?,svn,tags,branch,release,release-management,Svn,Tags,Branch,Release,Release Management,我们有标准的Subversion主干/分支/标记布局。我们有几个分支用于中长期项目,但到目前为止还没有一个分支用于发布。这是快来了 我们是否应该: 将发布分支和项目分支混合在一起 创建发布文件夹?如果是的话,还有比发行版更好的名字吗 创建项目文件夹并将当前分支移动到该文件夹?如果是,还有比项目更好的名字吗?我在其他存储库中见过“沙盒”和“钉子” 还有别的吗 释放与标记相同。。。你的主干中有多个项目吗?在这种情况下,我会在标签中复制相同的文件夹 所以 当我们想要准备发行版本3.1时,我们创建了一个

我们有标准的Subversion主干/分支/标记布局。我们有几个分支用于中长期项目,但到目前为止还没有一个分支用于发布。这是快来了

我们是否应该:

  • 将发布分支和项目分支混合在一起
  • 创建发布文件夹?如果是的话,还有比发行版更好的名字吗
  • 创建项目文件夹并将当前分支移动到该文件夹?如果是,还有比项目更好的名字吗?我在其他存储库中见过“沙盒”和“钉子”
  • 还有别的吗

  • 释放与标记相同。。。你的主干中有多个项目吗?在这种情况下,我会在标签中复制相同的文件夹

    所以


    当我们想要准备发行版本3.1时,我们创建了一个Branchs/3.1-release分支,并根据需要合并主干中的各个提交(我们的发行分支通常只从主开发分支接收最关键的修复)

    通常,这个版本分支会经历alpha和beta测试阶段,并且在下一个版本达到阈值时关闭

    一旦按下DVD或上传下载包,您还可以将发布分支标记为已发布,以便在以后需要时可以轻松地从完全相同的版本重建


    Carl

    我们已经使用了标记,尽管我们有一个大项目结构,而不是您概述的许多小项目

    在这种情况下,我们需要标记,例如1.0.0,但也需要分支,例如1.0。我关心的是将项目分支和发布分支混合在一起,例如

    branches
        this-project
        that-project
        the-other-project
        1.0
        1.1
        1.2
    tags
        1.0.0
        1.0.1
        1.1.0
        1.2.0
        1.2.1
    

    出于两个原因,我建议采用以下布局: -与给定项目相关的所有内容都在树的同一部分中;制造 人们更容易掌握 -通过这种方式,权限处理可能更容易

    顺便说一句:存储库很少而不是很多是个好主意,因为更改历史记录通常以这种方式保存得更好(如果您在存储库之间移动文件,则更改历史记录将消失,除非您采取特殊且有些复杂的操作)。在大多数设置中,应该只有两个存储库:主存储库和一个沙箱存储库,供尝试Subversion的人使用

    project1
       trunk
       branches
         1.0
         1.1
         joes-experimental-feature-branch
       tags
         1.0.0
         1.0.1
         1.0.2
    project2
       trunk
       branches
         1.0
         1.1
       tags
         1.0.0
         1.0.1
         1.0.2
    

    在我工作的地方,我们有“临时分支”和“发布分支”目录,而不仅仅是“分支”。因此,在您的案例中,项目分支将位于临时分支下,而发布分支(当然是在发布时创建的)将位于发布分支下。

    从其他人所说的话出发,我们有一个相当严格的结构,从alpha到beta再到生产。alpha代码是躯干头部的任何部分,在大多数情况下保持稳定,但并不总是如此。当我们准备发布时,我们创建一个“发布分支”,有效地冻结代码,并且只对其应用bug修复。(这些被移植回后备箱)。此外,标签会定期作为候选发布,这些都是测试版。一旦代码进入生产环境,发布分支将保持开放状态,以获得支持、安全性和bug修复,次要版本将被标记并发布

    一旦某个特定版本不再受支持,我们将关闭分支。这使我们能够清楚地区分哪些bug是针对哪些版本修复的,然后将它们转移到主干中


    重大的、长期的或大规模的、会长期破坏系统的变化也会被赋予它们自己的分支,但它们的寿命要短得多,而且没有“发布”这个词另一个重要的考虑因素是何时分支和何时关闭分支——这取决于您的发布计划,也取决于测试和发布所需的时间。根据我的经验,这需要进行大量管理,以确保团队中的每个人都知道计划是什么以及何时使用什么,所有这些都是通过在发布wiki中记录来实现的


    这不是您想要的答案,但我认为,一旦您对结构进行了排序(您已经有了很多好的建议),下一个挑战就是让团队了解情况并走上正轨。

    您是否从未想过为什么传统名称是“trunk”而不是“trunks”?你得到的肯定是一个“树干”。Subversion客户端试图提供对标记和分支的抽象,这是怎么回事?我知道,这很旧,但仅仅因为svn在“分支”和“标记”下面使用相同的功能并不意味着人们应该使用相同的功能。在您的示例中,分支和标记是如何关联的?1.0.*标签是1.0分支的各种版本的所有副本吗?@abeger:是的。幸运的是,我们谈论的是廉价拷贝:
    project1
       trunk
       branches
         1.0
         1.1
         joes-experimental-feature-branch
       tags
         1.0.0
         1.0.1
         1.0.2
    project2
       trunk
       branches
         1.0
         1.1
       tags
         1.0.0
         1.0.1
         1.0.2