最近工作中遇到一个开发团队,对代码的版本控制管理居然没有要求,导致了种种问题。

1.由于分支没有规范,最后一个小版本上线合代码居然化了几个小时,最后开发人员自己都不知道合到哪个分支。

2.一些人把所有的代码都提交到master上,造成在维护的时候,难以得到想要的高效的稳定的版本,也无法区分版本管理节点

3.代码提交的说明,很多人都不注意这个,随意写写就ok了。后期想要明确某次提交修改的问题点时,往往需要重复看代码才能明确,

在向主干分支提交(merge)代码时,代码说明往往该作为一个模块的修复,而不是一个一个问题点,细节点的修复。

(比如,提交了一版代码,忽然发现有个变量命名不规范,又提交了一版,一会又发现漏提交了某个问题,又提交一次,

这对于主干分支来说,就没能发挥代码版本控制的功能,说的不好听一点,这种版本控制管理就只是相当于一个代码的暂存控件而已,

谈不上控制和管理)

4.虽说是使用版本控制,但很多人都不明确,这个版本控制到底是什么,多数人只怕还停留在“代码存储”的概念上吧。

。。。

还有很多,列举起来种种难以穷尽。

当然,在实际的工作中,虽然没有完美的工作流,但是,我却相信是有更好更佳的工作流的。

比如,版本控制来说,对后期代码维护,版本维护,客户问题应急响应等方面都是很有帮助的。

拿 GitLab 来说,它很好地支持了多分支代码版本,需要利用这个特性来提高开发效率,上图就是目前的分支管理规范。

以下是个人在工作中的一点总结,分享出来大家共同勉励。有不足之处,希望大家多多交流,以求共同进步。

最稳定的代码放在 master 分支上,不要直接在 master 分支上提交代码,只能在该分支上进行代码合并操作,例如将其它分支的代码合并到 Master 分支上。开发中的代码需要从 master 分支拉一条 develop 分支出来,该分支所有人都能访问,但一般情况下,也不会直接在该分支上提交代码,代码同样是从其它分支合并到 develop 分支上去。当需要开发某个特性时,需要从 develop 分支拉出一条 feature 分支,例如 feature-1 与 feature-2,在这些分支上并行地开发具体特性。当特性开发完毕后,决定需要发布某个版本了,此时需要从 develop 分支上拉出一条 release 分支,例如 release-1.0.0,并将需要发布的特性从相关 feature 分支一同合并到 release 分支上,随后将针对 release 分支推送到测试环境,测试工程师在该分支上做功能测试,开发工程师在该分支上修改 bug。待测试工程师无法找到任何 bug 时,可将该 release 分支部署到预发环境,再次验证以后,均无任何 bug,此时可将 release 分支部署到生产环境。待上线完成后,将 release 分支上的代码同时合并到 develop 分支与 master 分支,并在 master 分支上打一个 tag,例如 v1.0.0。当生产环境发现 bug 时,需要从对应的 tag 上(例如 v1.0.0)拉出一条 hotfix 分支(例如 hotfix-1.0.1),并在该分支上做 bug 修复。待 bug 完全修复后,需将 hotfix 分支上的代码同时合并到 develop 分支与 master 分支。对于版本号也有要求,格式为:x.y.z,其中,x 用于有重大重构时才会升级,y 用于有新的特性发布时才会升级,z 用于修改了某个 bug 后才会升级。针对每个微服务,都需要严格按照以上开发模式来执行。

需要善用代码版本控制系统,我曾经遇到一个开发团队,由于分支没有规范,最后一个小版本上线合代码居然化了几个小时,最后开发人员自己都不知道合到哪个分支。拿 GitLab 来说,它很好地支持了多分支代码版本,需要利用这个特性来提高开发效率,上图就是目前的分支管理规范。
最稳定的代码放在 master 分支上,不要直接在 master 分支上提交代码,只能在该分支上进行代码合并操作,例如将其它分支的代码合并到 Master 分支上。
日常开发中的代码需要从 master 分支拉一条 develop 分支出来,该分支所有人都能访问,但一般情况下,也不会直接在该分支上提交代码,代码同样是从其它分支合并到 develop 分支上去。
当需要开发某个特性时,需要从 develop 分支拉出一条 feature 分支,例如 feature-1 与 feature-2,在这些分支上并行地开发具体特性。
当特性开发完毕后,决定需要发布某个版本了,此时需要从 develop 分支上拉出一条 release 分支,例如 release-1.0.0,并将需要发布的特性从相关 feature 分支一同合并到 release 分支上,随后将针对 release 分支推送到测试环境,测试工程师在该分支上做功能测试,开发工程师在该分支上修改 bug。
待测试工程师无法找到任何 bug 时,可将该 release 分支部署到预发环境,再次验证以后,均无任何 bug,此时可将 release 分支部署到生产环境。待上线完成后,将 release 分支上的代码同时合并到 develop 分支与 master 分支,并在 master 分支上打一个 tag,例如 v1.0.0。
当生产环境发现 bug 时,需要从对应的 tag 上(例如 v1.0.0)拉出一条 hotfix 分支(例如 hotfix-1.0.1),并在该分支上做 bug 修复。待 bug 完全修复后,需将 hotfix 分支上的代码同时合并到 develop 分支与 master 分支。
对于版本号也有要求,格式为:x.y.z,其中,x 用于有重大重构时才会升级,y 用于有新的特性发布时才会升级,z 用于修改了某个 bug 后才会升级。针对每个微服务,都需要严格按照以上开发模式来执行。

转载于:https://www.cnblogs.com/amwuau/p/8021638.html

关于代码控制管理的一些想法相关推荐

  1. C#控制管理VisualSVN Server

    C#控制管理VisualSVN Server 原文:C#控制管理VisualSVN Server VisualSVN Server可以用WMI接口管理(Windows Management Instr ...

  2. 代码片段管理工具_VS代码片段:提高编码效率的最强大工具

    代码片段管理工具 by Sam Williams 通过山姆·威廉姆斯 VS代码片段:提高编码效率的最强大工具 (VS Code snippets: the most powerful tool to ...

  3. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  4. 编程打开Windows服务控制管理器

    假设要自己编程来加载Windows下后缀为.sys的驱动程序:首先要使用 OpenSCManager 函数打开Windows服务控制管理器: 下面先来调用此函数看一下会不会打开成功:代码如下: #in ...

  5. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...

    程序的大部分代码都可以在必要的时候才加载到内存去执行,运行完后可以被直接丢弃或者被其他代码覆盖.我们PC上同时跑着很多的应用程序,每个应用程序使用的虚拟地址空间几乎可以整个线性地址空间(除了部分留给操 ...

  6. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  7. svn合并分支到主干_谈谈代码分支管理

    前言 从2019年上半年云音乐的客户端团队开始迁移到双周迭代后,随之而来的是我们需要重新调整代码分支的管理方法,来应对开发流程的变更. 双周迭代顾名思义一周开发一周测试,目的就是为了快速交付.纵观整个 ...

  8. Java代码控制UI界面

    介绍 在 Android 中,支持像 Java Swing 那样完全通过代码控制 UI 界面.也就是所有的 UI 组件都通过 new 关键字创建出来,然后将这些 UI 组件添加到布局管理器中,从而实现 ...

  9. SSM项目图书馆管理系统,适合新人练手和毕设参考,功能首页展示 系统注册登录登出 用户管理 权限控制管理 书籍管理 图书借阅管理 个人借阅记录管理 书籍详细信息展示等

    图书馆管理系统,系统采用B/S架构 系统采用框架:java+maven+stringboot+mybatis+mysql-plus+boostart(前端界面) 首页展示 内容后台管理 菜单权限管理 ...

最新文章

  1. html设置了字体为什么没效果,CSS / HTML代码不起作用,字体未应用
  2. 【学习笔记】Nake Statistics
  3. C语言全局变量的使用
  4. python执行bat文件_让Python文件也可以当bat文件运行
  5. 世界那么大,你又怎么能看的完呢
  6. 刷屏专用超长复制_求超长的刷屏文字
  7. linux添加 usr bin,Linux基础之/bin、 /sbin、/ usr/bin,、/usr/sbin的用处
  8. 多个视频如何合成一个视频?
  9. 虚拟机vmware12pro中安装win7系统时,点击一键安装win7到c盘就会出现dos工具箱
  10. server sql 将出生日期转为年龄_SQL中将用户的出生年月转换成对应的年龄
  11. linux脚本中的gt,shell中’-gt’与’’的区别
  12. 函数的参数和函数的值
  13. 通俗讲解 依概率收敛,大数定理和中心极限定理
  14. 计算机考研复试口语自我介绍,考研复试口语自我介绍范文
  15. SEO外链应该怎么做? 什么样的链接是好链接
  16. 金山毒霸2014官方免费下载
  17. chewing的作业——数字信封实现文件传输
  18. 计算机课程作品观摩,计算机观摩教学活动心得体会(共7篇)
  19. .py文件和.yaml文件作为配置文件
  20. 7计数 contact form_接近/门磁开关/计数器-GPS-2314L/R-XXX-LLL

热门文章

  1. java中的过滤器:Filter
  2. 线性表:5.约瑟夫环,循环链表及其C语言实现
  3. 读芯术python答案_你爱 “Python”的身体,还是“R”的灵魂?
  4. 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD
  5. 简洁的c++http协议获取内容(一)
  6. 计算机制说明书的实训报告,实训报告总结
  7. 95-30-020-Channel-NioSocketChannel
  8. 【Flink】使用Flink实现索引数据到Elasticsearch
  9. 【kafka】kafka 零拷贝 技术
  10. 【Kafka】kafka Failed to acquire lock on file .lock in /data/kafak-logs a kafka instance