2014-11-08 118 views
0

我有两个大项目X,Y及其下的几个子项目。我想创建一个像这样的项目存储库结构在SVN中创建大项目的子项目

svnroot/ 
     | 
     | 
     Project X -------sub-project Ax (/brunch, /tag, /trunk) 
     |   |--- sub-project Bx (/brunch, /tag, /trunk) 
     |   | 
     |   |--- sub-project Nx (/brunch, /tag, /trunk) 
     |   
     Project Y ------sub-project Ay (/brunch, /tag, /trunk) 
        |--- sub-project By (/brunch, /tag, /trunk) 
        | 
        |--- sub-project Ny (/brunch, /tag, /trunk) 

我想要项目下的子项目相关的独立开发。所有子项目都集成在一起制作项目X或Y.如何创建此项目结构?我正在寻找一种结构,以便我可以在任何层次结构(项目和子项目级别)上工作。

+0

我不会使用外部大多数人会被他们弄糊涂,简单的概念,但往往会在执行过程中变得复杂。它很喜欢做你正在说的话,但我发现你只需要符合SVN希望你做的事情。拥有顶级结构(分支,标签,干线)和主干下的每个子项目。创建一个项目X分支和一个项目Y分支。有重复是的,但更容易处理。你所说的“整合”步骤现在是“融入主干” – 2016-03-04 17:35:56

回答

0

这种设置不推荐用于Subversion恕我直言。您需要的是“分支分支”结构,我个人发现在与主干合并时会产生很多问题。在你的情况下,我建议看看例如饭桶。

然而,如果所描述的设置是你想要什么/需要做的,我会做到以下几点:

  1. 创建Project XProject Y的文件夹,每个包含子文件夹trunkbranchessubprojects
  2. 无论何时您需要直接在项目的功能上工作,请创建一个项目分支为svn cp path/to/svn/project_x/trunk path/to/svn/project_x/branches/myfeature。在myfeature分支上工作直到完成并直接重新集成到trunk
  3. 每当您开始处理子项目时,请创建一个新的空文件夹subproject_ax,然后创建子项目干线作为主项目干线的副本:svn cp path/to/svn/project_x/trunk path/to/svn/project_x/subproject_ax/trunk
  4. 当您需要某个子项目的分支时,请从子项目中继将其创建为svn cp path/to/svn/project_x/subproject_ax/trunk path/to/svn/project_x/subproject_ax/branches/mysubfeature。在mysubfeature分支上工作直至完成,然后重新合并到子项目trunk

为了保持整个字谜游戏运行起来,你需要定期更新您的项目分行(位于project_x/branches)以及子项目树干(在project_x/subproject_ax/trunk)同步与主trunk做合并。保持子项目分支与子项目中继同步也是如此。

总而言之,我希望你会看到灯光,或者a)使用git来做这件事,或者b)不要使用这个过于复杂的结构,而是使用正常的trunk/branches布局来满足你的需求。

1

这看起来像svn:externals的工作!

通过在目录上设置svn:externals属性,您可以从SVN中的任何其他位置(甚至是从不同的存储库)获取目录,并且它们将显示在您的工作副本中。然后您可以独立开发这些子目录,并将它们拖到需要它们的地方。

实施例:

svn_root/ 
│ ProjectX/ 
│ │ branches/ 
│ │ tags/ 
│ │ trunk/ 
│ │ │ ProjectDir1/ 
│ │ │ ProjectDir2/ 
│ │ │ Subprojects/ 
│ │ │ project_file_1.txt 
│ │ │ project_file_2.txt 
│ ProjectY/ 
│ Subprojects/ 
│ │ SubprojectA/ 
│ │ │ branches/ 
│ │ │ tags/ 
│ │ │ trunk/ 
│ │ SubprojectB/ 
│ │ │ branches/ 
│ │ │ tags/ 
│ │ │ trunk/ 
│ │ SubprojectC/ 

内部projectX创建和ProjectY “的子项目” 是空的。 “:SVN的外部”在内容拉从顶级子项目目录:此目录中名为上定义一个属性

^/Subprojects/SubprojectA/[email protected] Ax 
^/Subprojects/SubprojectB/[email protected] Bx 
^/Subprojects/SubprojectC/[email protected] Cx 

注意“@ 123”部分。这为SubprojectA设置了一个特定的修订版本。没有该说明符,您将无法看到在某个版本中使用了哪个版本的SubprojectA构建ProjectX。此外,使用此说明符允许决定在ProjectX上工作时何时从SubprojectA提取更新。您不希望在发布前一天破坏ProjectX,因为有人正在为ProjectY开发SubprojectA!

除了在trunk上指定子项目的特定修订版,您还可以指定分支或标记。

欲了解更多信息,请参阅SVN书:http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html

当开发一个子项目,您可以从顶层工作子项目目录,也可以暂时设置svn:外部对象在最新的行李箱拉删除修订说明符,并完全从您的ProjectX工作副本工作。只是不要承诺你的外部属性没有修订说明符!

+0

为什么GIT在颠覆时有这个基本的强制性功能赢了?在GIT中,您必须安装一个仅负担认知负担的子模块。 – 2017-03-13 05:52:34

0

我不是一个SVN仓库中“嵌入式”项目的忠实粉丝。他们创建问题

  1. 检查一个子项目会增加不相关项目的修订版本号。
  2. 子项目的构建很少独立。您通常需要检查要构建的根。
  3. 从一个子项目进入另一个子项目而不关注使用可交付成果的诱惑太大了。最终你会遇到一些非常糟糕的源到源交互。

SVN项目很便宜。运行svnadmin create几次,并使用模板来提供统一的密码访问方案。