在SVN中构造大型多应用程序代码库的正确方法是什么 我们目前已经得到了一个带有CODESION的单个回购,其中有一个单一的VPN项目,它包含了一些用于个别Visual C++解决方案的小项目。

在SVN中构造大型多应用程序代码库的正确方法是什么 我们目前已经得到了一个带有CODESION的单个回购,其中有一个单一的VPN项目,它包含了一些用于个别Visual C++解决方案的小项目。,svn,version-control,organization,Svn,Version Control,Organization,这一切都是从一个应用程序开始的,尽管我们确实分离了单独的库项目以供将来重用,但它仍然是同一个SVN项目。假设我们的目标是让多个应用程序在使用的库中有一些重叠,那么在SVN中设置它的正确/最佳方法是什么?当然,可以只保留一个SVN项目,并将应用程序项目和库项目作为子目录,但不知何故,这似乎并不正确 假设我们有App1、App2、App3和LibraryA、LibraryB、LibraryC、LibraryD,它们都是独立的项目/解决方案。。。您将如何在一个(或多个)回购协议下进行组织?是否有最佳实

这一切都是从一个应用程序开始的,尽管我们确实分离了单独的库项目以供将来重用,但它仍然是同一个SVN项目。假设我们的目标是让多个应用程序在使用的库中有一些重叠,那么在SVN中设置它的正确/最佳方法是什么?当然,可以只保留一个SVN项目,并将应用程序项目和库项目作为子目录,但不知何故,这似乎并不正确


假设我们有App1、App2、App3和LibraryA、LibraryB、LibraryC、LibraryD,它们都是独立的项目/解决方案。。。您将如何在一个(或多个)回购协议下进行组织?是否有最佳实践?

我将将所有内容都保存在一个存储库中,并将每个项目和库放在存储库的单独根目录中(有关详细信息,请参阅)

请记住,存储库结构不必与磁盘上的项目文件结构相同


此外,我将使用在各个项目之间共享库目录(作为存储库的单独根文件夹保存)。

我将将所有内容保存在一个存储库中,并将每个项目和库放在存储库的单独根目录中(有关详细信息,请参阅)

请记住,存储库结构不必与磁盘上的项目文件结构相同


此外,我还将使用
在各个项目之间共享库目录(作为存储库的单独根文件夹保存)。

我建议在同一存储库中使用以下布局:

App1\
    trunk
    tags
    branches
App2\
    trunk
    tags
    branches
App3\
    trunk
    tags
    branches
LibraryA\
    trunk
    tags
    branches
LibraryB\
    trunk
    tags
    branches
LibraryC\
    trunk
    tags
    branches
LibraryD\
    trunk
    tags
    branches
现在,我对你的发布时间表做一些假设。我假设每个应用程序和库都是按照不同的时间表发布的。这实际上是最坏的情况,但我的方案允许这样做。每个应用程序都需要预先编译其依赖项,并将其包含在存储库的目录中。以下是App1的外观,因为它依赖于库B和库C:

App1\
    trunk\
        deps\
            LibraryB, release 1.1
            LibraryC, release 4.3
    tags
    branches
这意味着,无论何时分支主干,都将获得必要的库,这大大简化了工作。请注意,它是库的编译二进制文件,而不是它们的源代码

主干的一个分支将使用上述版本,由于不允许修改它们,任何错误修复都需要进入App1。同时,要使用LibB&C的新版本,您可以在库团队发布LibB&C时在trunk中更新它们的版本。因此,一段时间后,您的存储库可能会如下所示:

App1\
     trunk\
         deps\
             LibraryB, release 1.3
             LibraryC, release 4.4
     tags\
         release-1.0\
             deps\
                 LibraryB, release 1.1
                 LibraryC, release 4.3
     branches\
         stable-2.0\
             deps\
                 LibraryB, release 1.2
                 LibraryC, release 4.2
允许在主干中工作使用最新的库版本。release-1.0使用的是固定版本(此处为最旧版本),而stable分支使用的是以前版本的库

上述计划是我在上一个雇主考虑了很多,但从未付诸实施。要使其工作,您需要有一个代码库,该代码库被拆分为应用程序/库,并且开发可以并行进行。对我们来说,情况并非如此。但我坚信这是一个值得一试的目标

祝你好运


另外,我强烈建议反对svn:externals。它们会使分行管理变得更加困难。例如,如果一个外部更改和一个分支依赖于它,您就有可能弄乱该分支(例如使其无法编译)。

我建议使用以下布局,所有布局都在同一个存储库中:

App1\
    trunk
    tags
    branches
App2\
    trunk
    tags
    branches
App3\
    trunk
    tags
    branches
LibraryA\
    trunk
    tags
    branches
LibraryB\
    trunk
    tags
    branches
LibraryC\
    trunk
    tags
    branches
LibraryD\
    trunk
    tags
    branches
现在,我对你的发布时间表做一些假设。我假设每个应用程序和库都是按照不同的时间表发布的。这实际上是最坏的情况,但我的方案允许这样做。每个应用程序都需要预先编译其依赖项,并将其包含在存储库的目录中。以下是App1的外观,因为它依赖于库B和库C:

App1\
    trunk\
        deps\
            LibraryB, release 1.1
            LibraryC, release 4.3
    tags
    branches
这意味着,无论何时分支主干,都将获得必要的库,这大大简化了工作。请注意,它是库的编译二进制文件,而不是它们的源代码

主干的一个分支将使用上述版本,由于不允许修改它们,任何错误修复都需要进入App1。同时,要使用LibB&C的新版本,您可以在库团队发布LibB&C时在trunk中更新它们的版本。因此,一段时间后,您的存储库可能会如下所示:

App1\
     trunk\
         deps\
             LibraryB, release 1.3
             LibraryC, release 4.4
     tags\
         release-1.0\
             deps\
                 LibraryB, release 1.1
                 LibraryC, release 4.3
     branches\
         stable-2.0\
             deps\
                 LibraryB, release 1.2
                 LibraryC, release 4.2
允许在主干中工作使用最新的库版本。release-1.0使用的是固定版本(此处为最旧版本),而stable分支使用的是以前版本的库

上述计划是我在上一个雇主考虑了很多,但从未付诸实施。要使其工作,您需要有一个代码库,该代码库被拆分为应用程序/库,并且开发可以并行进行。对我们来说,情况并非如此。但我坚信这是一个值得一试的目标

祝你好运


另外,我强烈建议反对svn:externals。它们会使分行管理变得更加困难。例如,如果一个外部更改,并且一个分支依赖于它,那么您就有可能弄乱该分支(例如,使其无法编译)。

这是来自CollabNet、Codesion Cloud Services的Jack。首先,感谢您成为Codesion的客户

你用“项目”来描述你的情况,但这是一个模棱两可的术语,而Subversion本身根本没有任何概念。这里真正需要考虑的不是Subversion本身,而是您的构建工具和发布策略。您希望配置能够最好地支持您想要执行的操作

例如,所有这些应用程序和库是否同时发布?完全独立?