我还是另一个Subversion用户,他在分布式版本控制的Tao中苦苦地对其自身进行重新教育。
使用Subversion时,我非常喜欢次项目方法,并且与大多数以前的雇主一样,我们将构建存储库分支;标签和主干如下:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
在实际的源代码树本身中,我们将使用(类似)以下结构:
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
这个想法曾经是(现在仍然是)使用存储库的结构来帮助工程团队之间进行结构化的沟通。业务中面向客户的部分以及其他利益相关者和领域专家。
举例来说:位于“项目”目录之一中的源文档只能使用一次(并赚钱)。位于“ productLines”目录之一中的文档的收入与该特定行中的产品被出售的次数相同。位于“图书馆”目录之一中的文档的收入是使用它们的任何产品售出的收入的多少倍。
它使费用摊销的概念变得明确,并有助于建立对整个企业中源文档重用的支持。
这也意味着我们的构建自动化工具可以在一个通用结构上运行。(我们的构建脚本在源代码树中查找“ build”文件夹,在其中找到配置文件,这些文件指定了如何构建每个组件;用于文档生成和测试的过程类似。)
值得注意的是,我使用的产品通常需要很长时间才能进行性能测量和特性测试。20至200小时;生成介于几GB到几TB之间的已处理测试结果/中间数据(必须存储并绑定到特定的系统配置,以便可以衡量性能随时间的提高)。这个问题使配置管理成为一个重要的考虑因素,并且还对集中化提出了一些要求,因为通常运行性能测量和特性测试所需的计算资源是有限的。(64-128个内核的小型集群)。
最后一点:持续集成系统知道需要触发构建;静态分析;烟雾测试和单元测试在每次修改主干,每次修改任何“标签”分支以及每次修改任何“ AUTOMATED”分支时进行。这样,单个开发人员便可以将CI系统及其个人分支(IMHO的一项重要功能)一起使用。
现在,这是我的问题:如何使用Mercurial复制以上所有内容(如果可能,请进行改进)。
- 编辑:
我当前的思路是使用中央Subversion存储库定义整体结构,但允许将hg用作客户端,以便开发人员可以在本地使用存储库。