Git笔记与思考六:工作流

工作流,讲的是对项目版本管理的一套操作流程规范。
在SVN时代,大家别无选择,都是从同一个分支上开发,提交,解决冲突。
用Git做版本管理后,得益于其分布式能力,大家就可以不依赖中央版本库,各自独立开发,提交,再在适当时候合并。因其灵活性而产生了多种多样的工作流。

集中式工作流

当然,你也可以忽略Git的分布式能力,忽略方便快捷的分支控制能力,在Git上用出Svn的感觉,反正你开心就好啦。这种在一个分支上进行协作的方式,我们也给它起个名,就叫集中式工作流。
所有人都在一个分支上开发,优点还是有的:

  1. 简单粗暴易操作,适合不太复杂的小项目
  2. 每一次提交,都解决一次冲突,化大冲突为小冲突。
  3. 当需要依赖他人的工作输出时,或者说与他人工作的耦合度高时,能方便工作快速推进。
    但是缺点也非常明显:
  4. 提交历史混乱,从提交历史上难以追踪一个完整功能的提交情况。
  5. 每次提交都有冲突的可能,假如冲突不好解决,或者合并了他人有问题的代码,就会打断自己的工作节奏。
  6. 不利于code review,不利于代码质量管理

Git Flow

我们应该在一个功能,或者叫特性,开发完成后,才与他人代码进行合并。
这时需要为一个个特性的开发创建专门分支。
在特性分支合并进master后,并不意味着代码就能进行发布,可能需要经过各种测试修改,这时需要再创建一个分支来完成这个步骤,它应介于master与特性分支之间,我们可以把它叫做开发分支develop。
另外,对于线上发行版,如果出现了紧急需要修复的bug,还需要一个分支hotfix来完成bug修复。
基于这些想法,Vincent Driessen同学在多年前提出了一个分支模型A successful Git branching model,详细描述了此种工作流,后人大多把它叫做Git Flow。

A successful Git branching model

  • 主要分支
    • master: 永远处在production-ready状态
    • develop: 最新的下次发布开发状态
  • 支援性分支
    • feature branches: 开发新功能都从develop分支出来,完成后merge回develop
    • release branches: 准备要release的版本,只修bugs。从develop分支出来,完成后merge回master和develop
    • hotfix branches: 等不及release版本必须马上修复线上的问题。从master分支出来,完成后merge回master和develop

概略来讲,就是开发工作在develop分支进行,然后提交到release分支,最后合并到master分支。
git工作流很标准但是使用很复杂。

Github Flow

GitHub Flow是github.com提出的方案,简化成只有一个feature分支和一个master分支。
github有一个pull request功能,多人协作时,在feature分支开发完成后,可以向项目负责人发起pull request,请求项目负责人拉取代码,检阅并合并pull request指定的分支。

Gitlab Flow

Gitlab Flow是gitlab.com提出的方案,觉得git flow太复杂,而github flow又过于简化而不能满足项目开发需求。
它的feature分支可以直接合入master分支,而master就变成了开发主分支。对于持续集成需求,提出从master开出pre-production分支和production分支,pre-production作为一个发布前的缓存,而production就代表了线上运行的版本。

Gitlab Flow 环境分支

你可能会奇怪它为什么有一个发布前缓存,这个看实际应用情景可选。比如iOS应用的发布,有一个苹果审核阶段,这个阶段的代码版本就是预发版本,可放在pre-production中,待审核通过,代码不再修改时,就随着应用的真正发布而同步到production分支。以后当我们需要追溯历史发布版本时,只需要查看production分支就可以了。

同样gitlab也有像github一样的pull request,不过在gitlab中,这个功能叫做merge request,也是请求别人来拉取我的分支代码,code review,然后合并。

一些小Tips

  • 空目录在Git中是个无关对象,它不能通过add命令被添加到提交中。如果需要把空目录提交并push到远程仓库,可以在目录下建一个无关文件.gitkeep
  • 特性分支上的提交如果是比较随意的话,它在合入主开发分支时应压缩一下提交历史,再比较正式地的提交一次。这时可用到squash命令,同时它可以作为merge的选项git merge --squash branch,这样的合并不会产生新提交,需要你在解决完冲突后,自己提交一次。

参考阅读

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

推荐阅读更多精彩内容