很久以前我出过一个 git 教程,小伙伴们要是还不懂 git 的用法,可以在公众号底部菜单中,有一个教程合集,里边有 git 教程的索引。
今天我们不聊基本用法,聊一聊 git 到底应该怎么用?我们知道相比于 svn,git 最牛的地方在于它的分支,分支很灵活,但是如果缺乏一个使用套路,又会用的乱糟糟的,特别是在团队协作中,该怎么玩 git 分支?
咱们也不发明什么轮子,也不设计什么全新流程,本文主要是和大家介绍三种常见的工作流:git flow、github flow 以及 gitlab flow。介绍完成后,在谈谈松哥的一些使用体验。
1. git flow 先来看 git flow。
git flow 是最早诞生也是最早被广泛使用的工作流程。
在 git flow 中,有两个长期存在且不会被删除的分支:master 和 develop。
在这两个分支中,master 主要用于对外发布稳定的新版本,该分支时常保持着软件可以正常运行的状态,由于要维护这一状态,所以不允许开发者直接对 master 分支的代码进行修改和提交,其他分支的开发工作进展到可以发布的程度后,将会与 master 分支进行合并,并且这一合并只在发版时进行,发布时将会附加版本编号的 git 标签。
develop 则用来存放我们最新开发的代码,这个分支是我们开发过程中代码中心分支,这个分支也不允许开发者直接进行修改和提交。程序员要以 develop 分支为起点新建 feature 分支,在 feature 分支中进行新功能的开发或者代码的修正,也就是说 develop 分支维系着开发过程中的最新代码,以便程序员创建 feature 分支进行自己的工作。
注意 develop 合并的时候,不要使用 fast-farward merge,建议加上 --no-ff 参数,这样在 master 上就会有合并记录,关于这两个的区别,大家可以参数松哥之前的 git 教程,这里不再赘述。
除了这两个永久分支,还有三个临时分支:feature branches、hotfixes 以及 release branches。我们分别来看:
feature branches
这个是特性分支,也叫功能分支,当你需要开发一个新的功能的时候,可以新建一个 feature-xxx 的分支,在里边开发新功能,这也是我们日常工作的大本营,开发完成后,将之并入 develop 分支中,如下图:
hotfixes branches
这个分支看名字就是用来修复 bug 的,当我们的项目上线后,发现有 bug 需要修复,那么就从 master 上拉一个名为 fixbug-xxx 的分支,然后进行 bug 修复,修复完成后,再将代码合并到 master 和 develop 两个分支中,然后删除 hotfix 分支,如下图:
release branches
这个是发版的时候拉的分支,当我们所有的功能做完之后,准备要将代码合并到 master 的时候,从 develop 上拉一个 release-xxx 分支出来,这个分支一般处理发版前的一些提交以及客户体验之后小 bug 的修复(bug 修复后也可以将之合并进 develop),不要在这个里边去开发功能,在预发布结束后,将该分支合并进 develop 以及 master,然后删除 release,如下图:
大概就是这个意思。
松哥工作中用的其实就是类似于 git flow 的工作流,为什么说是类似呢?我们项目中主要是保证了 master、develop 以及 release 三个分支,在此基础之上,其他随意。
2. github flow github flow 相比于 git flow 就要容易很多了,github flow 也是 github 上使用的工作流程,如果你想参与 github 上的某一个开源项目,那么不妨看看 github flow。
官方给的 github flow 流程如下:
它的流程是这样的:
需要开发新功能或者修复 bug 的时候,从 master 上拉一个新的分支下来。 新的分支开发完成后,或者说当你遇到困难开发不下去的时候,都可以发起一个 pr(pull request)。 pr 既提交代码,也让其他同事 review 你的代码,在这个过程中,你可以不断提交 pr。 最终你的 pr 被接受,合并进 master。 github 工作流虽然用着很简单,但是他的问题也很明显,就是没有对常见的工作场景中的问题提出解决办法。
3. gitlab flow gitlab flow 结合了 git flow 与 github flow 的优点,它不像 git flow 有那么多容易把新手绕晕的分支,同时它又可以适应不同的开发环境。
gitlab flow 的最大原则叫做 upstream first,中文译作“上游优先”:即只存在一个主分支 master,它是所有其他分支的 upstream,只有上游分支采纳的代码变化,才能应用到其他分支。
对于“持续发布”的项目,我们可以在 master 分支以外,再建立不同的环境分支。例如开发的分支是 master,预发布的分支是 pre-production,生产环境的分支是 production。
在这里开发分支是预发分支的 upstream,预发分支又是生产分支的 upstream。代码的变化,必须由上游向下游发展。比如,生产环境出现了 bug,这时就要新建一个功能分支,先把它合并到 master,确认没有问题,再 cherry-pick 到 pre-production,这一步也没有问题,才进入 production,如下图:
只有紧急情况,才允许跳过上游,直接合并到下游分支。
有稳定的版本需要发布时,我们就从 master 上拉一个新的分支出来,作为发版时候的分支,这些分支上不要开发新功能,只有修补 bug 的时候
对于”版本发布”的项目,建议的做法是每一个稳定版本,都要从master分支拉出一个分支,比如2-3-stable、2-4-stable等等。
以后,只有修补bug,才允许将代码合并到这些分支,并且此时要更新小版本号即可。
4. 小结 好啦这就是常见的三个 git 玩转流程,其实我们自己开发不必这么死板,结合自己的项目来就行了,松哥的项目,master、develop 以及 release 三个分支是固定的,这三个分支的作用跟前面介绍的 git flow 也是一致的,在此基础之上,其他的基本上没有太多限制,比较自由。
Dialog公司为SmartBond™产品系列添加蓝牙Mesh支持
人工智能与大数据的关系和影响
海伦哲获海林投资,表示将共同推动中国半导体行业发展
行业领先生物制药企业在冷链物流运输中采用虹科LIBERO温度记录解决方案
三星S9与S9 Plus摄像头的对比 但S9在OLED屏幕封装技术上进行了创新
Git最佳实践,什么才是最佳工作流
cd4069发光逻辑显示电路
三星电子挑战图像传感器领域世界第一
海富思科技HFS960P系列的高清模组特点及功能描述
通讯接口电路技术设计与可靠性验证流程概述
关于全局智能的介绍和影响分析
LED照明产品最新能效要求将正式在欧洲实施
Xilinx和IBM采用最新PCI Express标准,率先将加速云计算的互联性能提升一倍
如何测量电机的绝缘电阻
2018电视盒子排行榜,四大超级畅销的爆款电视盒子
锂离子电池铝塑膜的作用
拼多多再次大幅下调新款iPhone售价,最高降幅达2300元
通过应用界面就能远程检查车辆状态的智能手机到底有多神?
开关电源的软启动过程分析
知行科技获评“智驾域控制器前装本土供应商TOP10”