我有两个大项目X,Y和几个子项目。我想创建一个像这样的项目存储库结构
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 :(得分: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:externals”的属性,以从顶级Subprojects目录中提取内容:
^/Subprojects/SubprojectA/trunk@123 Ax
^/Subprojects/SubprojectB/trunk@456 Bx
^/Subprojects/SubprojectC/trunk@789 Cx
请注意“@ 123”部分。这将设置SubprojectA的特定修订版。如果没有该说明符,您将无法看到在某个版本中使用哪个版本的SubprojectA来构建ProjectX。此外,使用此说明符允许你决定何时在使用ProjectX时从SubprojectA获取更新。您不希望在发布前一天中断ProjectX,因为有人正在为ProjectY工作SubprojectA!
您也可以指定分支或标记,而不是在主干上指定子项目的特定修订版。
有关更多信息,请参阅SVN书籍:http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html
在开发子项目时,您可以从顶级Subprojects目录开始工作,也可以暂时设置svn:externals以通过删除修订说明符来引入最新的trunk,并完全使用ProjectX工作副本。如果没有修订说明符,请不要提交你的外部属性!
答案 1 :(得分:0)
这种设置不建议与Subversion恕我直言。你需要的是一个分支机构"分支机构"结构,我个人发现,当与主干进行合并时会产生许多问题。在您的情况下,我建议您查看例如GIT中。
但是,如果所描述的设置是您想要/需要做的,我会执行以下操作:
Project X
和Project Y
个文件夹,每个文件夹包含子文件夹trunk
,branches
和subprojects
。svn cp path/to/svn/project_x/trunk path/to/svn/project_x/branches/myfeature
。在myfeature
分支上工作直到完成并直接重新集中到trunk
。subproject_ax
,然后将子项目主干创建为主项目主干的副本:svn cp path/to/svn/project_x/trunk path/to/svn/project_x/subproject_ax/trunk
。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
中)与主{{1}同步通过合并来完成。保持子项目分支与子项目主干同步也是如此。
总而言之,我希望你会看到光明,并且a)使用git或b)不要使用这个过于复杂的结构,而是使用正常的trunk
/ trunk
布局需要。
答案 2 :(得分:0)
我不是"嵌入式"单个SVN存储库中的项目。他们创造了问题
SVN项目很便宜。运行svnadmin create
几次并使用模板提供统一的密码访问方案。