Git工作流开发实践

作为一个程序员,毫无疑问是需要和代码打交道的。俗话说,有人的地方就有江湖,同样,有代码的地方就有版本控制。

当年,Linus Torvalds 大神以一己之力开发出了初始的 Linux 内核,一举奠定其在开源界的江湖地位。但随着代码越来越庞大,再加上 BitKeeper 不再授权 Linux 项目免费使用,Linus 一怒之下,决定自己动手开发一个版本管理系统,这才促使了 Git 的诞生。这里面我们可以得出两个结论:

  1. BitKeeper 对开源界的贡献巨大,他们若不作出那个决定,就不会有 Git,更不会有现在全世界最大的同性交友社区;
  2. 大神跟普通人的区别就是,大神发现某个东西不好用或者不让用了,就会撸起袖子自己搞一个,而普通人则会四处寻找破解版或自降效率改用其他工具;

Git 是一个分布式的版本控制系统,有非常多的特性,如分支管理、工作区、fast forward 等。但也有不少难以使用的地方:

  1. 如何开发一个新的 feature?对小型项目还好,稍大一点的项目同时开发的 feature 可能达到十几个,这么多 feature 如何管理?
  2. 线上出了 bug 如何快速修复?并且保证之后发布的所有版本都包含这个修复的 commit?
  3. 每次修改代码,重新发布的流程很多很繁琐,如何保证 RD 严格按照规范来操作?

此时 Git flow 出现了,我将它称为「Git 工作流」,从字面意思来看,就是按照一个规定好的工作流程来操作,以保证规范性(此处解决了上述第三个问题)。Git flow 严格来说是一种思想、机制,Git 相关的大部分操作都可以用某些「流」来完成。它不同于许多开发人员惯用的方式。在传统开发模式下,许多人只维护了「master」和「develop」分支,相关的新功能在 develop 上开发,完成后 merge 到 master 分支上,更有甚者只有一个 master 分支。这样的工作模式对于对于并发进行多个 feature 的管理简直是个噩梦。

Git flow 设定了五个分支:master、develop、hotfix、feature、release。各个分支通过不同的耦合,形成一个「流」,共同完成代码从编写到上线的一系列流程。各个分支之间的关系如下图:

(图片来自网络)

下面来逐一解释:

由此,Git flow 成功将各个分支串起来,形成一个工作流,以便于快速开发迭代。但每次都手动去创建、合并、删除分支并在各个分支间跳转很繁琐,因为所有的步骤都是一样的,能不能将之简化一下呢?

答案就是 git-flow 工具,支持大多数主流系统。安装之后,可以简化为以下两条命令:

git flow [branch] start XXX
git flow [branch] finish XXX

请将 [branch] 自行替换为上述提到的几个分支之一,XXX 替换为相应的分支子名称;