2

我目前正在为工作评估不同的源代码控制解决方案,并且有一些关于分支的问题。

我对如何分支有基本的了解,但我不确定我们的构建机器(CruiseControl.net)如何获得一个分支来构建它。

我们有很多项目,这些项目都依赖于其他项目(还有其他项目):实用程序>数据访问>业务逻辑>通用GUI>(网站|桌面客户端)

我们如何构建存储库(如果有任何区别,则为 Vault),以便构建机器能够:

  1. 建立后备箱
  2. 构建“最新”分支

一个粗略的文件夹结构和/或关于如何从 Cruisecontrol 获取的解释会很棒。

谢谢

编辑:

为了增加一些清晰度,我们打算使用主干进行开发,然后为每个版本使用一个分支。

4

3 回答 3

2

“最新分支”是什么意思?分支应该用于主干之外的扩展开发——主干应该始终包含最新的生产代码。

每个项目应该有trunkbranches文件夹:

Project 1
  |-> trunk
  |-> branches
Project 2
  |-> trunk
  |-> branches
    etc.

然后,您的构建机器可以在本地将任何主干或分支检出到它想要的任何位置(对于您的互连项目,您必须对其进行设置,以便相对目录路径起作用)。在伪脚本中:

checkout project1/trunk /builds/project1
build /builds/project1

checkout project1/branches/myBranch /builds/project1
build /builds/project1
于 2009-03-23T11:21:50.453 回答
2

如果项目具有不同的发布周期(项目 1 的版本为 1.0,而项目 2 的版本已为 1.1),Mark 提出的解决方案效果很好。如果你所有的项目都是相互依赖的,我会从一个简单的结构开始

My Big Project
  | 
  +-- trunk
  |     |
  |     +-- utils
  |     |
  |     +-- data
  |     |
  |     +-- business
  |     |
  |     +-- gui (web)
  |     |
  |     +-- gui (swing)
  | 
  +-- branches
  | 
  +-- tags

这样,当你做一个分支/标记时,你确定你已经分支了所有的东西(整个代码)。否则,您在标记时总是冒着错过一个项目的风险。

您的构建服务器只需检查主干(包含所有内容)或一个标签/分支(也包含所有内容)并构建/安装版本。

一旦 utils 包稳定,您可以随时将其“升级”到同级项目并使用 Maven/Ivy 来管理依赖项。

于 2009-03-23T21:33:20.733 回答
0

只是为了澄清如何在 Vladimir 的方案中使用标签和分支。假设您的产品版本 1.x 已停用,版本 2.1 已发布,而您正在开发版本 3.0:

trunk <- you're working on version 3.0 here
 project1
 project2

branches
 ReleaseBranch-1.0
 ReleaseBranch-2.0 <-- fixes to version 2.1 (the current production version) get committed here, then merged into the trunk

tags
 Release-1.0 <-- a copy of the source that was used to build version 1.0
 Release-1.1
 Release-1.2
 Release-2.0
 Release-2.1

在您的持续集成/构建服务器中,您将需要 2 个过程:

  • 一个指向版本控制系统中的主干的
  • 一个指向版本控制系统上 ReleaseBranch-2.0 的

Pragmatic Version Control with Subversion一书是为 Subversion 设计的,但确实介绍了如何组织如上所述的存储库。

于 2009-04-25T13:40:38.083 回答