YIXUNFE / blog

文章区
151 stars 25 forks source link

活用 GIT 分支规范发布流程的构想 #69

Open YIXUNFE opened 8 years ago

YIXUNFE commented 8 years ago

活用 GIT 分支规范发布流程的构想

这不仅仅是构想,而且完全可以付诸行动。

虽然本文中显著的注明了 GIT 字样,但并不表示 SVN 无法完成类似工作,而本文也无意于讨论 SVN 对于分支的支持是否友好,而仅以 GIT 为参考,设计一套发布流程规范,为将来的新项目做铺垫,也是给大家一个蓝图。


发布版本 & 发布窗口 & 功能需求

要理解一套完整的发布流程,我们有必要先了解一下流程中的三个层面。

首先是发布版本,每一次的线上发布都可以认为是一次 release 版本,重大的功能发布可以认为是一个重大版本,对其进行打标(GIT 有 tag,SVN 没有研究)。当发布上线失败时,我们就可以拉取上一个 release 版本的代码实现代码回滚。

接下来看看发布窗口。发布窗口和我们工作的公司息息相关,比如我们一周有两个发布窗口,除特殊需求及修复 BUG 外,非窗口时间做线上发布都被认为是非法的(测试MM和测试GG要来找你喝咖啡的哦:smile:)。

最后是功能需求,即你手上需要完成的功能点。每一个功能需求会有对应的排期,有项目经理、产品经理或者研发同学确定后,就可以预判到上线日期。功能需求的完成需要投入开发与测试的人力资源。


分支与三个层面的关联规则

了解了发布流程中的三个层面后,我们可以将它们与工作中的一般流程——开发、测试、上线相结合,制定一套分支与层面的关联规则。

规则一:为每个功能需求建立分支

为每个功能需求建立的分支,我们暂且称之为功能分支。分支应该是基于最近一次的 release 版本创建的。当多个需求同时进行时,可以互不干扰的将对应分支部署至测试环境,方便测试人员进行测试,减少其他需求的干扰。

分支命名可以由开发人员自定义,不与其他分支名冲突即可,比如 userName_feature_createTime。


规则二:为每个发布窗口建立分支

发布窗口的分支也应该基于最近一次的 release 版本创建的,我们称之为窗口分支。发布窗口的分支可以被视为所有当期需要发布的功能分支的集合。在功能分支测试完毕后就可以合并至窗口分支。窗口分支最终会通过预发布测试后,推向线上。

窗口分支的权限,在理想情况下应该是由测试人员控制。


规则三:主干的更新与提交

当窗口分支发布至线上并通过测试后,我们就可以从主干拉取窗口分支,然后进行提交版本。

每一次主干的提交必须确保是上线发布成功后,以尽可能确保主干的版本纯净性。当需要版本回退时,获取主干的上一个版本部署一下即可,轻松方便。

在主干上随便提交代码的行为应该是严格禁止的,所以主干的权限应该仅分配给少数负责人。


总结

-1

分支与流程


Thanks


jincdream commented 8 years ago

SVN 也有 tag,但 SVN 的tag功能很蛋疼,只是把打 tag 的文件夹复制一份到目标路径。。。