使用分支进行开发和部署

我是乔帮主 2021-10-29 13:43:46 ⋅ 1291 阅读

原文:Developing and Deploying with Branches

分支能够使开发工作更有条理,可以将正在开发的代码跟那些已完成的代码、已测试的代码和稳定下来的代码隔离开。不但使开发协作更加高效,而且也为系统升级和问题修复的部署打下自动化的基础。

在master/trunk分支上编码

即使你不了解分支概念,但只要使用VCS,就已经在使用分支了。VCS系统默认就已经有了一个分支,我们从一开始就在这个分支上提交代码:

  • Subversion里的默认分支名为trunk,存在trunk目录里
  • Git的默认分支名为master

每个VCS在处理分支的创建、合并和操作行为时,机制不尽相同。

分支的好处

使用分支会有一些成本,但其价值巨大。

适合进行特性开发和Bug修复

任何一个特性开发、负责Bug修复都创建分支,能够避免并行工作是对研发代码的干扰,提高团队协作效率。只有当针对分支的开发工作完成后,才能合并和删除这个分支。

最佳实践:

  • 尽量避免将未完成的代码提交到代码库的默认分支上
  • 稍微负责一点的工作(特性、修复复杂bug)都应该创建分支
  • 开发分支被合并到稳定版的分支后就把它删除,这样代码库会很干净

隔离不同服务器环境的代码

可以使用分支存储不同服务器环境的代码。

代码从开发到上线,一般都会有stage、stable、production等环节,我们可以将这些环境的代码用不同的分支管理起来,就叫stage、stable、production。

每个分支完成当前阶段的工作,符合条件后合并到下一个环节的分支,直至最终部署。各个分支各司其职,互不干扰,降低协同的复杂度。而且可以随时查看不同分支间的差异,快速准确地定位代码的差异,对其进行评审,为寻找劣质代码、不完整的代码、调试代码或其他遗留问题创造了极好的机会。

切记,无部署不合并。服务器分支的代码要保证跟服务器环境上的代码保持同步,如果还没有做好部署的准备,就不要将上一个环节的分支合并到本环境的分支上。否则就会导致本环节的分支代码状态跟服务器代码状态不一致。

使用服务器环节分支,代码变更要严格遵循这样的合并顺序:

  1. 特性分支或bug分支 => stage,用于测试
  2. 测试完成后,特性分支或bug分支 => stage,用于构建
  3. 从stable => production,用于部署

遵循这个顺序,代码的提交历史就很清晰,而且我们也能很确信地知道哪个环境允许的哪些代码。

最佳实践:

  • 使用代码库的默认分支作为"stable"分支
  • 为每个环境创建一个分支,包括staging和production
  • 无部署不合并
  • 合并之前查看分支间的代码差异
  • 分支合并顺序是单向的

全部评论: 0

    我有话说:

    SourceTree里GitFlow的使用

    这几天看详细了一下Git Flow的模型介绍,感觉“很好很强大”,这个开发模型利用GIT的易于分支合并的特点,能够比较容易地将开发、发布、部署、bug修复分隔开来。 正准备在自己的团队内部推广

    微型Java开发框架Solon 1.1发布,QPS达10万+

    简介 Solon 是一个微型的Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验

    WebMIS 1.0.0 beta.3 发布,全栈开发基础框架

    全栈开发基础框架,包括 PHP / Python / SpringBoot / Phalcon / Flutter / NodeJS / Vue / Swoole / Redis / API 等技术

    精品推荐:Nacos 发布 v0.6.0 版本,支持 Dubbo Docker 部署

    阿里巴巴微服务开源项目Nacos发布 v0.6.0 版本,该版本开始支持 Dubbo的服务发现配置管理,并针对 Docker 部署提供了官方的 Docker 镜像,以及优化了Nacos 控制台的

    Apache SkyWalking 8.2.0 发布:新增浏览器端监控指标分析语言、使用标签查询

    Apache SkyWalking 8.2.0 已发布,SkyWalking 是观察性分析平台应用性能管理系统 (APM),提供分布式追踪、服务网格遥测分析、度量聚合可视化一体化解决方案,支持

    Cookie Session不难,一个是Map的key,一个是Map的value

    本文分别对Cookie与Session做一个介绍总结,并分别对两个知识点进行对比分析,让大家对CookieSession有一个更深入的了解,并对自己的开发工作中灵活运用带来启示。

    聊一聊分布式场景下redismemcached,及各自经典使用场景优缺点

    在BAT里,redis已经逐渐取代了memcached,成为分布式场景广泛使用的缓存方案。接下来,我们就分析下,redis是如何取代memcached,成为开发者的宠儿的。

    完整研发流程中用到的环境类型协作关系

    研发流程有多个不同的环节构成,一般分为开发、测试、验证部署,这些环节需要不同的环境来支撑。对于企业来说,这些环境又需要互相配合来完成正常的研发部署工作,为了避免混乱的相互引用、提高协作的效率,界定

    为什么说作为程序员分库分表的必要性一定要掌握?

      互联网大厂程序员必须掌握海量数据高并发问题处理技能,期望进入大厂的程序员一定要仔细看这篇! MySQL 分库分表是做什么的? 相信很多程序员对 MySQL 都比较熟悉了,目前国内

    SpringBoot2.0填坑(一):使用CROS解决跨域并解决swagger 访问不了问题

    公司后台是采用SpringBoot2.0 搭建的微服务架构,前端框架用的是vue 使用前后端分离开发方式,在开发联调的时候需要进行跨域访问,那么使用CROS解决了跨域问题,但是swagger 却用

    Apache Kylin 3.1.1发布,开源分布式分析引擎

    Apache Kylin简介 Apache Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口 OLAP 接口,支持 TB 到

    什么情况下才需要分库分表?

    我请教一下,我模拟测试,搞了几张大表都是3千万左右的数据,带主键查询秒级响应,jmeter插入能够达到每秒6、700条左右,我业务量每秒就是300条左右插入,这个场景下是否不需要考虑分库分表的问题?

    Apache Wicket 9.3.0 发布,Java Web 开发框架

    Html 代码进行了有效的分离(有利于程序员美工的...

    Web前端:单页应用部署时缓存策略

    前端网站采用Vue + Nginx的方式进行生产环境部署。发现登录系统之后,出现页面空白问题,刷新几次后显示正常。

    CKEditor 5 v26.0.0 发布:具有可扩展的构建、内联部件样式注释指南

    CKEditor 5 v26.0.0 已经发布,本次更新包括支持创建一个定制的编辑器构建、Mac上的按键管理、设计内联部件、编辑器占位符一组关于使用协作特性注释的新指南等内容。 通过 DLL

    开源推荐】基于 Go 语言的轻量级高性能日志库 logit使用及测评

    logit 是一个简单易用并且是基于级别控制的日志库,可以应用于所有的 GoLang 应用程序中。

    GoAccess 1.4.4 发布,日志分析工具

    GoAccess 1.4.4 发布了。GoAccess 是一个基于终端的快速日志分析器。其核心思想是实时快速分析查看 Web 服务器统计信息,而无需使用浏览器,适合希望通过 SSH 快速分析访问日