源控制建立一个分支

时间:2009-03-23 11:12:14

标签: build-automation cruisecontrol.net nant branch sourcegear-vault

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

我对如何分支有基本的了解,但我不确定我们的构建机器(CruiseControl.net)如何能够建立分支机构。

我们有很多项目,这些项目都是由其他项目所依赖的(还有其他项目): 公用事业>数据访问>业务逻辑>通用GUI> (网站|桌面客户端)

我们如何构建存储库(如果存在差异,则为Vault),以便构建计算机能够:

  1. 构建主干
  2. 建立'最新'分支
  3. 粗略的文件夹结构和/或如何从巡航控制中得到的解释会很棒。

    感谢

    修改

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

这样,当您执行分支/标记时,您确定已经分支所有(整个代码)。否则,您在标记时总是有可能错过一个项目。

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

一旦utils包稳定,你总是可以将它“升级”为兄弟项目,并使用Maven / Ivy来管理依赖项。

答案 2 :(得分:0)

只是为了澄清弗拉基米尔计划中标签和分支的使用方式。假设您的产品版本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设计的,但确实如上所述组织了一个存储库。