我已经使用 Perforce 很长时间了,所以我的评论可能有点以 Perforce 为中心,但基本原则适用于任何具有一半体面分支的 SCM 软件。我非常相信使用分支开发实践。我有一个“main”(又名“mainline”),它代表从现在到永恒的代码库。其目的是在大多数情况下,这是稳定的,并且如果迫在眉睫,您可以随时删除反映系统当前功能的版本。那些讨厌的销售人员一直在问......
开发发生在从 MAIN 分支的分支中(通常 - 有时您可能希望从现有的 dev 分支分支)。尽可能频繁地从 MAIN 集成到您的开发分支,以防止出现太多分歧 - 或者您可以简单地为以后更大的集成期进行预算。仅当您确定它将在即将发布的版本中推出时,才将您的屁股踢新功能集成到 MAIN 中。
最后,你有一个 RELEASE 行,它为不同的版本选择不同的分支。有一些选择取决于您的 SCM 软件的标签功能,以及主要/次要修订的不同程度。因此,您可以选择,例如,为每个点发布选择发布分支,或者只选择主要版本号。你的旅费可能会改变。
通常,尽可能晚地从 MAIN 分支到发布。错误修复和最后一分钟的更改可以直接进入 RELEASE 以便稍后集成到 MAIN 中,或者进入 MAIN 以便立即集成备份。没有硬性规定——做最有效的事情。但是,如果您有可能提交给 MAIN 的更改(例如,来自开发分支,或 MAIN 上某人的“小调整”),则执行前者。这取决于您的团队如何工作,您的发布周期是什么等。
例如,我会有这样的事情:
//MYPROJECT/MAIN/... - the top level folder for a complete build of all the product in main.
//MYPROJECT/DEV/ArseKickingFeature/... - a branch from MAIN where developers work.
//MYPROJECT/RELEASE/1.0/...
//MYPROJECT/RELEASE/2.0/...
一个不平凡的项目可能会同时激活多个 DEV 分支。当一个开发已经集成到 MAIN 中以使其成为核心项目的一部分时,尽快关闭旧的 DEV 分支。许多工程师会将 DEV 分支视为自己的个人空间,并随着时间的推移将其重用于不同的功能。劝阻这一点。
如果在发布后,您必须修复错误,请在相应的发布分支中进行。如果之前在 MAIN 中修复了该错误,则进行集成,除非代码在 MAIN 中发生了很大变化,否则修复是不同的。
真正区分代码线的是您用来管理它们的策略。例如,运行哪些测试,谁在更改前/后进行审核,如果构建中断会发生什么操作。通常策略——因此开销——在发布分支中最强,而在 DEV 中最弱。这里有一篇文章介绍了一些场景,并链接到了其他有用的东西。
最后,我建议从一个简单的结构开始,并且只根据需要引入额外的开发和发布结构。
希望这会有所帮助,并且不会过多地说明流血。