2009-12-23 47 views
5

在我们公司,我们正在研究一个由不同C/C++模块组成的产品。理想情况下,每个层级和模块应由不同团队分别开发并独立测试。目前,我们有单独的每个模块到它自己的分支:\svn:外部和标签,如何组合代码

的模块是:

 
\hid 
    \branches 
    \tags 
    \trunk 
\api 
    \branches 
    \tags 
    \trunk 
\ui 
    \branches 
    \tags 
    \trunk 

另外,该产品的发布为,将模块和编译经常使用CI系统建设。

 
\productX 
    \branches 
    \5.0 
     \hid-4.0 (svn:externs \hid\branches\4.0) 
     \api-3.0 (svn:externs \api\branches\3.0) 
     \ui-5.0 (svn:externs \ui\branches\5.0) 
    \tags 
    \trunk 

我们遇到的主要问题是'svn tag'与externs关联的行为。目前的extern引用了HEAD--因为我们希望定期构建最新版本,以确保所有模块一起工作。但是,一旦构建成功并且我们继续发布,如果有一种简单的方法来自动标记所有内容(包括extern中使用的版本),那将会很不错。就目前而言,我们必须为模块创建标签,然后将extern更新为这些标签,然后标记产品,最后将其交换回主干。

有没有更干净的方法来做到这一点?随时也可以评论当前的结构。

回答

3

我认为这将是更好的让你的外部定义指的是模块的标签,而不是他们的树干。通过这种方式,您只需拉动模块的已知里程碑,并且在标记核心产品时不需要更改任何内容。

这与只使用明确的修订版本(而不是HEAD)在svn:externals的最佳实践(SVN文档中所建议的)一致。

+1

谢谢迈克尔。您的意见反映我所读的内容(很多!)关于SVN SVN的:实习医生实践。我们正在做的主要是建议: *大多数时候,产品是指模块的分支 *在发布之前,我们为每个模块创建一个标签 *接下来,我们更新externs以指向这些标签 *最后,我们标注了产品 *,然后我们再 这工作,但非常繁琐和容易出错的改变实习医生回分支机构。我希望有一个更好的办法? – Charles 2009-12-23 16:41:53