代码之家  ›  专栏  ›  技术社区  ›  3Dave

svn文件夹结构组织

  •  1
  • 3Dave  · 技术社区  · 14 年前

    在过去的几个月里,我的一个web应用程序已经从一个项目文件发展到包含几个类库。svn结构有点有机地发展起来,看起来像这样:

    repository-root
        site1
            trunk
            tags
    
        site2
            trunk
            tags
    
        library1
            trunk   
            tags
            ...
    
        library2
            trunk
    

    repository-root
        site1
            trunk
            tags
               release-20100922
                 site1
                 library1
                 library2
                 ...
               release-20110101
                 ...
    

    Site1 Site2 两者都引用类库 library1 library2

    • 每个站点的标记都包含创建站点标记时关联类库的冻结副本,以及

    我可能只是想错了。建议?

    3 回复  |  直到 14 年前
        1
  •  1
  •   tangens    14 年前

    我遇到了一个类似的问题,通过使用这个存储库结构解决了这个问题:

    repository-root
        trunk
            site1
            site2
            library1
            library2
        tags
            site1
                release-20100922
                    site1
                    site2
                    library1
                    library2
            site2
                release-20110101
                    site1
                    site2
                    library1
                    library2
    

    是的,对于site1的发布,我也标记了site2。但是,标签是廉价的颠覆。

        2
  •  5
  •   Christoph Strasen    14 年前

    svn:外部组件模块化应用中的“软源代码控制链接”。

    你有几种“独立”的产品,叫做“站点”,它们依赖于库。你的产品和你的库都有松弛周期。 为了提高稳定性,您可能不希望在任何地方使用主干库代码,因为它可能不仅破坏一个站点,而且破坏多个站点。另一方面,在更敏捷的方法中,“尽早休息,经常休息”可能是可取的。 因此,选择在主线开发中使用哪种库代码版本将是一个优势。

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

    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
                ...
    

    当您改变主意并决定“嘿,在我们的主干中使用新的2.0library1api是小菜一碟,也许我们将来应该使用主干”时,就不需要合并或移动库源代码了。

    假设“library1.0”中有一个bug,所以您发布了“library1.1”。您还需要对主应用程序进行一个新的错误修复版本,并将其发布出去。因此,您需要更新“site12.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
                ...
    

    外部确保您可以选择要合并哪些库更改以及何时合并。这将有助于减少“意外”。

    但要注意svn:外部速度慢关闭你的“svn更新”命令与每个外部必须检查。不过,代码正在进行改进。

    svn propget svn:externals http://svn.silverstripe.com/open/phpinstaller/tags/2.4.2/
    

    希望我能帮忙

        3
  •  1
  •   Gilbert Le Blanc    14 年前

    如果不做任何特殊操作,可能的Subversion目录结构可能如下所示:

    repository-root
        site1
            trunk
            tags
                release-20100922
                    site1
        site2
            trunk
            tags
    
        library1
            trunk   
            tags
                release-20100922
                    library1
    
        library2
            trunk   
            tags
                release-20100922
                    library2
    

    您和您的开发人员必须确保在一个版本中的所有组件上创建一个一致的发布标签。

    在site1 release-20100922标记下的某个地方,可以有一个txt文件,其中列出了该版本中包含的库。

    你可以像你概述的那样构造你的标签。这将是一个手动过程,但它可以做到。