Asp.net svn文件夹结构组织

Asp.net svn文件夹结构组织,asp.net,svn,project-management,Asp.net,Svn,Project Management,在过去的几个月里,我的一个web应用已经从一个项目文件发展到包含几个类库。svn结构是有机生长的,看起来像这样: repository-root site1 trunk tags site2 trunk tags library1 trunk tags ... library2 trunk repository-root

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

repository-root
    site1
        trunk
        tags

    site2
        trunk
        tags

    library1
        trunk   
        tags
        ...

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

    library1
        trunk   
        tags
            release-20100922
                library1

    library2
        trunk   
        tags
            release-20100922
                library2
现在,发展正在加速,我希望有这样的东西

repository-root
    site1
        trunk
        tags
           release-20100922
             site1
             library1
             library2
             ...
           release-20110101
             ...
现在,既然Site1和Site2都引用类库library1和library2,那么重新组织文件夹结构以便

每个站点的标记包含创建站点标记时关联类库的冻结副本,以及 每个站点仍然可以引用类库,而不必在每个站点的主干中有单独的副本
我可能只是想错了。建议?

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

repository-root
    site1
        trunk
        tags

    site2
        trunk
        tags

    library1
        trunk   
        tags
        ...

    library2
        trunk
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文件,其中列出了该版本中包含的库


您可以按照概述的方式构造标记。这将是一个手动过程,但可以完成。

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

repository-root
    site1
        trunk
        tags

    site2
        trunk
        tags

    library1
        trunk   
        tags
        ...

    library2
        trunk
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文件,其中列出了该版本中包含的库


您可以按照概述的方式构造标记。这将是一个手动过程,但可以完成。

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

repository-root
    trunk
        site1
        site2
        library1
        library2
    tags
        site1
            release-20100922
                site1
                site2
                library1
                library2
        site2
            release-20110101
                site1
                site2
                library1
                library2
每次发布时,我都会将整个主干复制到一个新标签上。标签的第一个子目录显示了我发布该版本的站点。通过这种方式,我可以确定库的正确版本


是的,对于site1的发布,我也标记了site2。但是,嘿,使用subversion标记很便宜。

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

repository-root
    trunk
        site1
        site2
        library1
        library2
    tags
        site1
            release-20100922
                site1
                site2
                library1
                library2
        site2
            release-20110101
                site1
                site2
                library1
                library2
每次发布时,我都会将整个主干复制到一个新标签上。标签的第一个子目录显示了我发布该版本的站点。通过这种方式,我可以确定库的正确版本

是的,对于site1的发布,我也标记了site2。但是,嘿,使用subversion标记很便宜。

svn:externals作为模块化应用程序中的软源代码控制链接

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
            ...
当您改变主意并决定在主干中使用新的2.0 library1 API是小菜一碟时,就没有必要合并或移动库源代码,也许我们将来应该使用主干

让我们想象一下library1.0中有一个bug,所以您发布了library1.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
            ...
外部确保您可以选择要合并哪些库更改以及何时合并。这将有助于减少意外

但是请注意,svn:externals会减慢svn update命令对每个必须检查的外部命令的执行速度。不过,代码正在进行改进

查看silverstripe公共存储库,了解他们的工作方式。对他们来说很好

svn propget svn:externals http://svn.silverstripe.com/open/phpinstaller/tags/2.4.2/
希望我能帮助

svn:externals作为模块化应用程序中的软源代码控制链接

svn:externals可以帮助您避免一些手动任务,并提供关于什么是什么以及在什么版本中的清晰概念

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

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

我建议采用以下布局:

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.0 library1 API是小菜一碟时,就没有必要合并或移动库源代码,也许我们将来应该使用主干

让我们想象一下library1.0中有一个bug,所以您发布了library1.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
            ...
外部确保您可以选择要合并哪些库更改以及何时合并。这将有助于减少意外

但是请注意,svn:externals会减慢svn update命令对每个必须检查的外部命令的执行速度。不过,代码正在进行改进

查看silverstripe公共存储库,了解他们的工作方式。对他们来说很好

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

希望我能提供帮助

svn:externals允许您从存储库甚至其他存储库中检出其他目录。它能够引用最新版本或特定版本。svn:externals允许您从存储库甚至其他存储库中检出其他目录。它能够引用最新版本或特定版本。我讨厌手工操作,但这可能是必要的。我们的想法是在发布时保留整个代码库的完整版本,以防我必须回滚任何包含其引用项目的站点。在您有20个站点和40个库之前,这是可以的,每个站点只使用其中的一部分。跟踪正在发生的事情会更加困难,开发人员查看一个发布标签所花费的时间可能会变得令人望而却步。但是如果你只有几个站点,那就没问题了。我正在使用这个结构进行软件开发,有50多个项目和库。如果我真的只需要几个项目或库,我会进行稀疏签出。每个项目都有自己的定义文件,其中列出了它与其他项目和库的依赖关系。我讨厌手动执行此操作,但这可能是必要的。我们的想法是在发布时保留整个代码库的完整版本,以防我必须回滚任何包含其引用项目的站点。在您有20个站点和40个库之前,这是可以的,每个站点只使用其中的一部分。跟踪正在发生的事情会更加困难,开发人员查看一个发布标签所花费的时间可能会变得令人望而却步。但是如果你只有几个站点,那就没问题了。我正在使用这个结构进行软件开发,有50多个项目和库。如果我真的只需要几个项目或库,我会进行稀疏签出。每个项目都有自己的定义文件,其中列出了它与其他项目和库的依赖关系。我喜欢这样,只是需要依赖开发人员来维护它。也许我可以在构建系统中使用一个标记脚本来实现这一点。我喜欢这样,只是需要依赖开发人员来维护它。也许我可以在构建系统中使用一个标记脚本来实现这一点。一旦团队中的每个人都理解了它,这种方法就可以很好地工作。在svn:external属性中使用修订号也是一个好主意,即使您链接到library1/tags/1.0,因为某个地方的某个人可能会调皮地修改library1/tags/1.0,并在下一次开发人员检查site1的2.0.1以复制报告的bug时更改其行为。一旦团队中的每个人都理解了它,这种方法就会很好地工作。在svn:external属性中使用修订号也是一个好主意,即使在链接到library1/tags/1.0时也是如此,因为某个地方的某个人可能会调皮地修改library1/tags/1.0,并在开发人员下次检查site1的2.0.1以复制报告的错误时更改其行为。