Git 工作中怎么用?
今天介绍一下工作中会用到的 Git 分支模型。
先贴上图以表敬意
闲言
在学校不管是自己写课程设计还是给老师做项目,有 2 到 3 个人一起协作开发时就会使用 Git ,但是只是简单用了它所提供的代码协作功能,在学校的项目,比如课程设计,开发完老师检查完就没有维护了,给老师做项目也是,基于项目的特征:没有持久性、一次性开发,所以没有应到 Git 分支模型。在企业中,一个应用往往是有比较长的生命线,由很多个迭代项目开发构成,这时要解决几十甚至几百人的代码协作问题,就需要一套完整的规范的代码开发流程。
我还记得当初大四的时候,去了一家企业实习,当时小团队只有 3 个开发人员,git 使用没有规范,只有一个 master 主分支,项目也没有管理规范,来一个需求点就做。当时经常出现代码覆盖,各种代码合并,线上代码也不知道是哪个节点的代码。。。到我走的时候,也没使用上这个分支模型。毕业后入职了某银行,不说分支模型了,Git 都没用上,直到今年跳槽到互联网公司才了解到这个分支模型。因此,你工作不一定会真正用到这个分支模型,如果是在互联网企业,很有可能会使用上。
有些小伙伴看到这张偌大的图觉得有些晕,很认真地说,这是一张大家都在用的图,特别是互联网企业。如果是还没有工作的小伙伴,可能有些陌生,没事,我们来看一下这些内容。
分支介绍
master :这个分支的代码是发布到生产的代码
develop :这个分支的代码是预发布到生产的代码
release :这个分支的代码是新版本发布到生产的代码
feature :这个分支的代码是新需求开发的代码
hotfix :这个分支的代码是紧急修复生产 bug 的代码
场景设想
下面列举一些可能你在工作中会经常面对的场景
组长分配新需求下来,安排下周上线(假设是 1227 号),你看看当前有没有下周版本的分支?有的话很简单,checkout 下周分支(feature_app1.1.0_1227)来开发就行,没有的话这时需要新建分支,从 develop 分支创建新的 feature 分支(feature_app1.1.0_1227),然后将对应的 pom.xml 版本号修改成 1.1.0-SNAPSHOT,注意命名,比如这里我用 feature 做前缀,你也可以自己设定一个规则。
开发完 feature_app1.1.0_1227 需求,移交了测试,很遗憾,测试出现了 n 个 bug,这时依旧在 feature_app1.1.0_1227 上修复 bug。
终于到了发版前一天,测试 MM 说 n 轮测试完了,没问题,拉上线版本,再做一次回归测试。这时,你就需要把 feature_app1.1.0_1227 分支合并到 develop 分支,然后从 develop 分支中创建新的分支 release_app1.1.0_1227,然后修改对应的版本号为 1.1.0-RELEASE。
到了发版日早上了,测试 MM 用了 release_app1.1.0_1227 版本测试了一番,又发现了一个 bug。别慌,只要不是生产的 bug,都好解决。这时你要在 release_app1.1.0_1227 修复 bug,切记不能在 feature_app1.1.0_1227 上修改,feature_app1.1.0_1227 分支已经没有多大作用了,只用来看代码提交记录。
安安全全的到了晚上,开始发版了,发完版突然发现了有异常,定位问题后发现是有一行代码写错了,跟组长确认后,在 release_app1.1.0_1227 分支上做了修改,重新打包后发版,验证了一段时间,没问题了。。。
发版总算完成了,这时,别忘记把 release_app1.1.0_1227 版本合并到 develop 和 master 分支。还有一点很重要的,把 develop 分支代码合并到 1227 以后的版本(如果已经有1227 以后的版本的话)。注意:这个步骤合并代码要谨慎,如果有别人的代码合并冲突比较大,需要找那个开发的同事一起合并代码。总算可以睡个好觉了。。。
告别了旧需求,迎来了新需求,接下来的需求开发就按上面的步骤走。。。
- 第二天,突然生产上一直报 NullPointerException,定位发现是一行代码没有判空导致的,三番确认,原来这个数据以前是不为空的,现在确实需要支持有些数据为空的,需要紧急修复这个 bug,和组长确认之后,从 master 分支上拉了一个 hotfix_app1.1.1_1228 分支代码,修复了 NullPointerException,打包后上线,验证没问题后,把 hotfix_app1.1.1_1228 分支合并到 develop 和 master 分支,并把 develop 分支合并到 1227 以后的版本。
好了,一大坨的文字描述了基于分支模型开发的过程。不同公司在应用过程中可能会有些微小的不同,但是整体流程都是差不多的。比如有的公司可能会把 release 合并到 master 后,用 master 代码发布到生产,发版当时有异常,再从 master 分支上拉 hotfix 分支进行修复。上面描述的步骤就不一样了,发版时出现异常,直接在 release 上修复。这些小的差别就不用计较太多啦。
希望本文能够让你认识到有这么一个标准的 Git 分支模型,在不管工作上还是学习上,在需要分支管理的时候,回忆起有这么一个图,根据你的场景再应用进去,肯定会少走很多弯路。
公众号原文: 成熟的 Git 分支模式
转载于:https://blog.51cto.com/7665794/2368065
Git 工作中怎么用?相关推荐
- git工作中常用命令
基础 克隆代码 git clone http://xxx.git 克隆代码到b目录 git clone http://xxx.git b 拉取最新代码 git pull 分支 切换指定(develop ...
- g-git 相关命令 及其 基本原理探索(二):git 在工作中的常用命令操作 ,超级实用!!!
上一篇git 基本原理对git的使用以及文件分布已经有了一个整体的了解. 本篇将对工作中常用的一些git 操作命令的操作进行总结归纳,方便今后查阅. 文章目录 1. 分离头指针 2. 通过HEAD 来 ...
- 收藏!工作中Git使用实践和常用命令流程合集
来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...
- 工作中必须要知道的git高级用法
1. rebase变基 问题: 工作中我们一般是从master分支拉自己的开发分支开发,如果master分支被组长合并了其他同事的开发,也就是master分支ahead你的分支,我们这时一般不能直接提 ...
- 我在工作中是如何使用Git的
大家好,我是若川.今天分享一篇关于git的好文章.我自己经常用命令行终端和git缩写.具体可以看我以往的文章.使用 ohmyzsh 打造 windows.ubuntu.mac 系统高效终端命令行工具, ...
- git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!
作者:洋仔聊编程 出自:InfoQ 写作平台 原文:xie.infoq.cn/article/1ce91dc60431b1b8845729d41 工作中git是一项必不可少的技能,在项目的开发进程中起 ...
- 【Git】1090- 我在工作中是如何使用Git的
本文首发于政采云前端团队博客:我在工作中是如何使用 Git 的 https://www.zoo.team/article/how-to-use-git 前言 最近在网上有个真实发生的案例比较火,说的是 ...
- 工作中遇见的git疑问整理
1.git fetch,git merge,git pull,repo sync的区别 这些命令都用于将本地代码与远程存储库同步,但它们的实现机制和使用方式略有不同: git fetch 命令用于从远 ...
- 日常工作中常用的几个git指令
前言 最近,我的主管让我就git 使用做个组内分享,分享一下我在日常工作中是如何使用git的.现在我整理成文章,分享出来,希望对你有所帮助. 基础概念 git有三个分区,分别是: 工作区(Workin ...
最新文章
- python游戏编程入门 免费-Python游戏编程入门4
- 拼接字符串 新增数据方法
- HTTP Status 405 - JSPs only permit GET POST or HEAD问题的分析和解决办法
- windows下的diskpart指令彻底格式化清除U盘
- cannot be deleted directly via the port API: has device owner network:floatingip
- 使用rem进行页面适配
- (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
- 0928多线程运行——作业
- RDP大屏幕报表sql问题
- 组态软件与PLC远程控制的配置
- 【持续更新...】相关资源汇总
- Java实现Word转PDF【完整版】
- MIKE 21 教程 2.5 水动力模块教学:涡粘系数(Eddy viscosity),河床阻力与曼宁系数(Bed Resistance)
- 制作一个类“全能扫描王”的简易扫描软件(opencv)
- lower_bound( )和upper_bound( )的常见用法
- python-onvif实现客户端控制相机云台
- 配置微信公众号业务域名,解决“非微信官方网页,请确认是否继续访问”问题
- python 爬取简单静态网站之电影天堂
- Linux Nginx启动报错:Failed at step EXEC spawning /etc/rc.d/init.d/nginx: Exec format error.
- 自定义Windows 10开始菜单的10种方法