SVN反应结构

SVN反应结构,svn,Svn,我的公司即将转向使用svn,我正在寻找关于存储库结构的建议 我们目前有大约10个项目和一个内部通用软件库,其中一些项目使用,一些项目不使用。由于通用软件是在内部修改的,因此它本身就是一个项目。因此,尽管这些项目互不相关,但它们可能共享相同的通用软件 使用通用软件的项目总是指基线版本,即在任何项目下(除了通用软件项目本身之外)都不会修改通用软件 那么,如果使用svn:externals将公共软件项目的“标记”版本挂接在一起,每个项目的单独存储库是最好的吗 非常感谢您的建议。所有开发人员是否都会参与

我的公司即将转向使用svn,我正在寻找关于存储库结构的建议

我们目前有大约10个项目和一个内部通用软件库,其中一些项目使用,一些项目不使用。由于通用软件是在内部修改的,因此它本身就是一个项目。因此,尽管这些项目互不相关,但它们可能共享相同的通用软件

使用通用软件的项目总是指基线版本,即在任何项目下(除了通用软件项目本身之外)都不会修改通用软件

那么,如果使用svn:externals将公共软件项目的“标记”版本挂接在一起,每个项目的单独存储库是最好的吗


非常感谢您的建议。

所有开发人员是否都会参与所有项目?或者每个开发人员只从事一个特定的项目

如果前者我认为每个项目都是一个分支(因为分支之间的切换比存储库之间的切换更容易)。您还可以非常轻松地为新项目创建新分支


如果是后者,则单独回购可能更干净、更易于管理

所有的开发人员都会参与所有的项目吗?或者每个开发人员只从事一个特定的项目

如果前者我认为每个项目都是一个分支(因为分支之间的切换比存储库之间的切换更容易)。您还可以非常轻松地为新项目创建新分支


如果是后者,则单独回购可能更干净、更易于管理

不要使用单独的存储库,将其全部放在一个存储库中(SVN可以非常愉快地处理大型回购)。这将使您在将来共享公共代码和分支方面受益匪浅


不同之处其实只是顶层的一个额外“目录”。好处是维护更少,访问更方便。

不要使用单独的存储库,将其全部放在一个存储库中(SVN可以非常愉快地处理大型回购)。这将使您在将来共享公共代码和分支方面受益匪浅


不同之处其实只是顶层的一个额外“目录”。这样做的好处是维护更少,访问更方便。

我建议您根据中的第一个示例将所有内容都放在一次回购中。共同点是一个项目和所有其他项目

然后将公共版本的发布标记复制到每个项目,以反映每个项目当前使用的公共版本

布局示例:

/common
  /branches
    /common_improvements1
    /common_improvements2
  /tags
    /common-1.0.0
    /common-1.0.1
  /trunk
/projA
  /branches
    /stable-1.0
      /common (=copy of /projA/trunk@oldrev =copy of /common/tags/common-1.0.0)
    /stable-2.0
      /common (=copy of /projA/trunk@somerev =copy of /common/tags/common-1.0.1)
    /projA_ongoing_fix_branch
  /tags
    /1.0.1
    /1.0.2
    /1.1.0
    /2.0.0
    /2.0.1
  /trunk
    /common (=copy of /common/tags/common-1.0.1)
/projB
  (similar structures)
/projC
  (similar structures)
好处:

  • 在公共和项目之间易于访问和跟踪
  • 如果有用,用户可以轻松地交互、测试和支持彼此的努力
  • 公共发布标签的副本回答了这个问题:我们目前在这个项目中使用的是哪个版本的公共发布标签
  • 导入期间的可选步骤:

    您是否对当前的所有项目都有一个通用的布局,例如服务器上的文件结构或其他版本控制系统?如果是,我建议您:

  • 将整个布局导入新存储库中的文件夹,例如/root/old\u layout
  • 将项目文件和文件夹移动到svn repo内的新布局中

  • 这样做的好处是修订日志可以回答以下问题:此文件在我们以前的结构中位于何处?这在向开发人员传授新结构时非常有用,如果临时资源(如顾问)在布局更改后返回。

    我建议您根据中的第一个示例将所有内容放在一个回购中。共同点是一个项目和所有其他项目

    然后将公共版本的发布标记复制到每个项目,以反映每个项目当前使用的公共版本

    布局示例:

    /common
      /branches
        /common_improvements1
        /common_improvements2
      /tags
        /common-1.0.0
        /common-1.0.1
      /trunk
    /projA
      /branches
        /stable-1.0
          /common (=copy of /projA/trunk@oldrev =copy of /common/tags/common-1.0.0)
        /stable-2.0
          /common (=copy of /projA/trunk@somerev =copy of /common/tags/common-1.0.1)
        /projA_ongoing_fix_branch
      /tags
        /1.0.1
        /1.0.2
        /1.1.0
        /2.0.0
        /2.0.1
      /trunk
        /common (=copy of /common/tags/common-1.0.1)
    /projB
      (similar structures)
    /projC
      (similar structures)
    
    好处:

  • 在公共和项目之间易于访问和跟踪
  • 如果有用,用户可以轻松地交互、测试和支持彼此的努力
  • 公共发布标签的副本回答了这个问题:我们目前在这个项目中使用的是哪个版本的公共发布标签
  • 导入期间的可选步骤:

    您是否对当前的所有项目都有一个通用的布局,例如服务器上的文件结构或其他版本控制系统?如果是,我建议您:

  • 将整个布局导入新存储库中的文件夹,例如/root/old\u layout
  • 将项目文件和文件夹移动到svn repo内的新布局中

  • 这样做的好处是修订日志可以回答以下问题:此文件在我们以前的结构中位于何处?这在向开发人员传授新结构时非常有用,如果临时资源(如顾问)在布局更改后返回,也会非常有用。

    谢谢。每个开发人员将从事一个特定的项目。因此,我希望当他们连接到项目存储库时,他们会看到项目X是一个顶级文件夹和通用文件夹,其中包含指向该项目所需的通用软件的外部链接。可能会使用export for COMMON,因为它不应该在该项目下进行修改?如果您希望projectX成为顶层,则为每个项目使用单独的回购协议将实现这一点。有各种各样的预提交选项,这取决于您希望锁定公共的程度,但这取决于个人偏好/您对开发人员的信任程度;)谢谢每个开发人员将从事一个特定的项目。因此,我希望当他们连接到项目存储库时,他们会看到项目X是一个顶级文件夹和通用文件夹,其中包含指向该项目所需的通用软件的外部链接。可能会使用export for COMMON,因为它不应该在该项目下进行修改?如果您希望projectX成为顶层,则为每个项目使用单独的回购协议将实现这一点。有各种各样的预提交选项,这取决于您希望锁定公共的程度,但这取决于个人偏好/您对开发人员的信任程度;)谢谢,非常有帮助!这是一个