代码之家  ›  专栏  ›  技术社区  ›  Will

颠覆项目结构?

  •  3
  • Will  · 技术社区  · 15 年前

    为Subversion创建项目时,每个项目都应该包含自己的主干、分支和标记目录吗?如。

    MY项目1
    -分支
    -标签
    -中继线
    MY项目2
    -分支
    -标签
    -中继线
    等。。。

    或者每个项目本身应该进入一个全方位的结构中?如。

    分支机构
    标签
    大旅行箱
    - MyPro 1
    - MyPro 2
    等。。。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Allie the Icon    15 年前

    如果出现需要,选项1可以更简单地拆分为不同形式的源代码管理,因此我更喜欢它。

    在我看来,在第一个选项中管理项目范围的权限更容易。

        2
  •  2
  •   Martin v. Löwis    15 年前

    这两种方法都很常见,尽管第一种方法更常见。

    更常见的是为单独的项目设置单独的存储库——人们就是无法忍受在“他们的”存储库中有“不相关”的东西。

        3
  •  2
  •   Jim T    15 年前

    我个人选择了选项1。这是因为选项2存在以下相当微妙的问题:

    使用选项2,工作副本通常与存储库结构匹配。这意味着您可以有效地签出整个副本(或其部分,但处于相同的常规结构中)。

    当涉及到依赖关系时,这是一个问题,例如ProjectA&ProjectB引用库C,库中所做的更改与应用于2个项目的更改之间没有控制。一旦对libraryc的主干进行了提交,所有使用它的项目都会接受它。这样做的净效果是你害怕改变图书馆,因为它可能会破坏其中一个项目。

    使用选项1,可以使用Externals将特定版本的库C引入到ProjectA&ProjectB中。事实上,如果需要,A&B可以使用不同的版本。

    这意味着您可以随意更改库,然后控制何时将更改应用于项目-根据需要测试和更改代码,并知道您要升级到库的最新版本。如果升级存在根本问题,可以继续使用旧版本,直到修复库的问题。

    另一种查看方法是,使用选项2,如果查看ProjectA的历史记录,则无法知道对库所做的更改何时影响项目。事实上,同一版本的ProjectA可能会在某一天工作,而不是在下一天工作,因为库被更改了。唯一能告诉你变化的历史记录的方法是查看完整的历史记录,它还包括ProjectF和LibraryX完全不相关的变化,使得你想要的有用信息很难看到。

    在选项1中,ProjectA的历史记录中有一个修订,告诉它使用库的新版本。这种变化不会神奇地发生——当您明确地说要使用库的新版本时。这通常是一个更稳定的环境。

        4
  •  1
  •   sbi    15 年前

    通过最近的cvs-to-svn转换,我们决定在这两者之间做些什么:在顶层将相关项目分组在一起,下面是主干/标签/分支,下面是项目。

    这是因为,在这个地方,许多项目相互关联,并且经常被标记、分支等在一起。