svn文件夹结构组织

3Da*_*ave 1 svn asp.net project-management

在过去的几个月里,我的一个网络应用程序从一个项目文件增长到包括几个类库.svn结构有点有机增长,看起来像这样:

repository-root
    site1
        trunk
        tags

    site2
        trunk
        tags

    library1
        trunk   
        tags
        ...

    library2
        trunk
Run Code Online (Sandbox Code Playgroud)

现在开发正在加速,我想有类似的东西

repository-root
    site1
        trunk
        tags
           release-20100922
             site1
             library1
             library2
             ...
           release-20110101
             ...
Run Code Online (Sandbox Code Playgroud)

现在,由于Site1Site2均引用类库library1library2,什么是要去关于重组的文件夹结构,这样的最佳方式

  • 每个站点的标记包含创建站点标记时关联类库的冻结副本,以及
  • 每个站点仍然可以引用类库,而无需在每个站点的主干中都有单独的副本

我可能只是想到这个错误.建议?

Chr*_*sen 5

svn:外部作为模块化应用程序中的"软源控制链接".

svn:externals可以帮助您避免一些手动任务,并清楚地了解什么是什么(以及在什么版本中).

您有几种依赖于库的"独立"产品称为"站点".您的产品和库也有相应的周期.为了提高稳定性,您可能不希望在任何地方使用中继库代码,因为它可能会破坏一个而不是多个站点.另一方面,在更敏捷的方法中,可能需要"早点休息,经常休息".因此,选择在主线开发中使用的库代码版本将是一个优势.

此外,您的稳定/孵化分支(如果将来还有)可能希望与库的一个特定版本同步,以便将增强的兼容性传输到结果标记中.

我会建议以下布局:

repository-root
    site1
        trunk (active development, unstable)
             mycode
             library1 -> external of "library1/tags/2.0"
        branches
            2-branch (maintenance, stable)
                mycode
                library1 -> external of "library/tags/1.0"
        tags
            2.0.0
                mycode
                library1 -> external of "library/tags/1.0"
            2.0.1
                mycode
                library1 -> external of "library/tags/1.0"
    library1
        trunk   
        tags
            1.0
            2.0
            ...
Run Code Online (Sandbox Code Playgroud)

当你改变主意并决定"在我们的主干中使用新的2.0库1 API是一件小事可能我们应该在将来使用主干"时,没有必要合并或移动arround库源代码.

让我们想象一下"library1 1.0"中有一个错误,所以你发布了"library1 1.1".您还需要为主应用程序创建一个新的错误修复版本并将其发布出去.所以你更新你的"site1 2.0"维护分支,测试并创建一个标签.

repository-root
    site1
        trunk (active development, unstable)
             mycode
             library1 -> external of "library1/tags/2.0"
        branches
            2-branch (maintenance, stable)
                mycode
                library1 -> external of "library/tags/1.1" (changed the property)
        tags
            2.0.0
                mycode
                library1 -> external of "library/tags/1.0"
            2.0.1
                mycode
                library1 -> external of "library/tags/1.0"
            2.0.2
                mycode
                library1 -> external of "library/tags/1.1" (inherits property change)
    library1
        trunk   
        tags
            1.0
            1.1
            2.0
            ...
Run Code Online (Sandbox Code Playgroud)

Externals确保您可以选择要包含哪些库更改以及何时需要它.这将有助于减少"意外".

请注意,虽然svn:externals会减慢你的"svn update"命令,因为每个外部都需要检查.尽管如此,代码正在进行改进.

查看silverstripe公共存储库,了解它们的工作方式.适合他们.

svn propget svn:externals http://svn.silverstripe.com/open/phpinstaller/tags/2.4.2/
Run Code Online (Sandbox Code Playgroud)

希望我能提供帮助