四种常见的Git工作流

在这篇文章中,我们将会讨论最受Git用户欢迎的几种分支工作流程,您可以选择最适合自己的方式。

Git Flow

Git工作流是最广为人知的工作流。由Vincent Driessen 在2010年所发明,这种工作流建立在两个具有永久生命周期的分支基础之上:

  • master分支 - 对应生产环境的线上代码。所有开发代码都会在某个时间点合并到master分支。

  • develop分支 - 对应的是预生产的代码。当功能分支开发完毕之后,会被合并到develop分支。

与之并行的,是在开发周期之内,还会使用一些其他类型的分支以便支持开发流程:

  • feature-* ( * 表示通配符,下同) 分支 — 功能分支用来开发下次发布包含的新功能。这些分支应当都是从develop分支派生出来,然后最终也应该合并回develop分支。

  • hotfix-* 分支 — 当master分支中含有不应出现的状况时,则有必要派生出hotfix分支对master分支进行紧急修复。这些分支应当派生自master 分支,并且最终应当同时合并回master 和develop 分支。

  • release-* 分支 — release 分支用于准备一次新的生产环境版本更新。创建release-*分支用来修复一些在测试环境未发现的小BUG,以及更新此版本的原信息。其应当派生自develop分支,并且最终同时合并回master 分支和 develop分支。

优势

  • 在项目周期之内,该工作流保证任何时刻两个主要分支都是处于纯净状态的

  • 由于遵循系统化的模式,因此分支命名容易理解

  • 大多数Git工具都支持该工作流的扩展工具

  • 当项目中需要同时维护多个生产版本时,该工作流模式非常理想

缺陷

  • Git 的历史记录将变得异常混乱,可读性很差

  • master / develop 分支的割裂使CI/CD流程变得更加困难

  • 当项目维护单一生产环境版本时,该工作流则不适用

GitHub Flow

GitHub 工作流是一个轻型的工作流,它是GitHub 在2011年创建,其工作流遵循以下6个原则:

  1. 任何时刻的master分支代码都是可以用来部署的

  2. 任何新变更都需要从master派生出一个分支,并且为其起一个描述新变更内容的名字:比如 new-oauth2-scopes

  3. 在本地提交该新分支变更,并且应经常性的向服务器端该同名分支推送变更

  4. 当你需要帮助、反馈,或认为新分支可以合并的时候,新建一个pull request

  5. 只有在其他人review通过之后,新分支才允许合并到 master 分支

  6. 一旦新分支被合并推送至master分支,master分支应当立即进行部署

优势

  • 该工作流对于CI/CD流程友好

  • 是Git工作流的一种简版替换

  • 当项目维护单一生产环境版本时,该工作流适用

缺陷

  • 生产环境对应的代码极易处于不稳定状态

  • 对于依赖发布计划的项目无法充分支持

  • 该工作流并不涉及关于部署,环境,发布和问题等方面的解决方案

  • 当项目维护多生产环境版本时,该工作流不适用

GitLab Flow

GitLab工作流由GitLab创建于2014年。这种工作流将功能驱动的开发模式与问题跟踪结合在一起。与GitHub工作流最大的不同,是GitLab工作流新创建了与环境相关的分支(比如,staging分支和production分支),适用于每次合并功能分支后不需马上部署至生产环境的项目(如SaaS软件,移动软件项目等)。

GitLab工作流遵循以下11条原则:

  1. 使用功能分支进行开发,而不是直接在master分支上提交代码 (如果你的开发主分支是 master的话,下同)

  2. 测试每一次commit,而不仅仅是对master分支进行测试

  3. 在所有commits上运行自动化测试(如果你的测试脚本运行时间超过5分钟,就让他们并行)

  4. 在合并代码之前进行code review,而不是在合并之后

  5. 以分支名或者tag为准进行自动化的部署

  6. tag由人来设定,而不是CI

  7. 发布版本应建立在tag上

  8. 已push的commits永远不要进行rebase

  9. 所有人从master派生新分支,最终合并回`master

  10. 修复bug时应该优先修复master分支的代码,修复之后再cherry-pick到线上分支

  11. commit messages 要有意义

优势

缺陷

  • 比GitHub工作流更加复杂

  • 当项目维护多生产环境版本时,将会变得和Git Flow一样复杂

One Flow

The One Flow is a proposed alternative in article GitFlow considered harmful by Adam Ruka, written in 2015. The main condition that needs to be satisfied in order to use OneFlow is that every new production release is based on the previous release. The most difference between One Flow and Git Flow that it not has develop branch.

One Flow 最初在GitFlow considered harmful by Adam Ruka, 2015这篇文章中提出,作为Git Flow的另一种选择。使用One Flow需要满足的最重要的条件,是生产版本的每一次更新都基于前一生产版本,与Git Flow最大的区别是没有develop这一分支。

优势

缺陷

  • 自动化CI/CD能力的项目慎用

  • 功能分支不明确,不适用持续集成

  • 当项目维护多生产环境版本时,该工作流不适用

参考

翻译自:https://medium.com/@patrickporto/4-branching-workflows-for-git-30d0aaee7bf

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容