SVN:并行2个不同主要版本开发时的存储库结构?

时间:2011-11-23 09:53:52

标签: svn

我对subversion很新,我想知道如何构建一个存储库。 正如我所读,'trunk'目录用于主要开发,'tags'用于快照版本,'branches'用于进行一些重大更改/测试而不会打扰主干。

问题是当有两个主要版本并行开发时:我不太清楚如何构建它。我以python语言为例,版本2和版本3都在开发中,我看到了这些结构的可能性:

1st one :
===========

repos/
  python2/
    trunk/
    tags/
      V2.5/
      V2.6/
      V2.7/
    branches/
      big_modif1/
      testing2/
  python3/
    trunk/
    tags/
      V3.0/
      V3.1/
      V3.2/
    branches/
      big_modif43/
      testing37/

2nd one :
===========

repos/
  python/
    trunk/
      V2/
      V3/
    tags/
      V2.5/
      V2.6/
      V2.7/
      V3.0/
      V3.1/
      V3.2/
    branches/
      big_modif_on_v2.x/
      testing2_on_v2.x/
      big_modif43_on_v3.x/
      testing37_on_v3.x/

3rd one :
===========

repos/
  python/
    trunk/
    tags/
      V2.5/
      V2.6/
      V2.7/
      V3.0/
      V3.1/
      V3.2/
    branches/
      V2_trunk/
      V3_trunk/
      big_modif_on_v2.x/
      testing2_on_v2.x/
      big_modif43_on_v3.x/
      testing37_on_v3.x/

您会选择什么(当然,您可以提出其他建议)?

3 个答案:

答案 0 :(得分:3)

我认为组合可能是最好的。让我用你的例子解释一下:

  • Python 2和Python 3是在同一个项目中开发的,来自同一个团队(因此至少应该在一个存储库中开发)。
  • Python 3是未来(主要)开发版本,Python 2未进一步积极开发(不确定)。
  • 两者都是向公众发布的,应该保持同步,但Python 3中没有任何漏洞可以泄漏到Python 2中。

所以我会关注"single project repo layout"SVN red book中所述):

repos/
  python/
    trunk/
    branches/
      V2/
    tags/
      ...
      V2.7/
      ...
      V3.2/

这里的要点是V2在版本3的开发开始时分支。你应该坚持以下合并规则:

  • 如果它们兼容,则仅将V2中的错误修复程序合并到主干中。
  • 不要从trunk(== V3)合并到V2。

答案 1 :(得分:2)

我们对SVN使用略有不同的存储库结构:

Trunk目前正在使用。

为所有开发工作创建开发分支。通常在所有项目中,我们都有一个主要项目使用的主要开发(或Alpha)分支,然后我们根据需要创建其他分支。

在部署期间创建标记以测试,uat,live等,然后在成功部署到生产环境后合并到主干。

如果并行工作(例如错误修复),一旦合并回主干,则将更改合并到任何剩余的活动分支。

任何源代码控制的秘诀就是确保团队遵循您同意的做法。

答案 2 :(得分:1)

任何布局仅为已接受的协议

  • 没有什么禁止在默认repo结构的基础上创建两个子目录,即你的v2(可能以相同的方式分支分支),v1也可用
  • 您可以考虑将开发分为不同的回购(与外部相关联,何时何地需要)