说说git(二)

上篇文章《说说git(一)》简要的介绍了git的基本信息及要点,本篇主要说下git的工作流,git工作流是git仓库的流程管理规范,它是项目协作的基础,如果对它不了解,在需要多人共同完成的项目中,还是会捉襟见肘,相反,如果能够在项目中实践git工作流,会让你有条不紊,事半功倍。

一般小团队对代码管理的重视程度不是很高,谈到用git管理项目,他们往往只会停留在工具层面上,例如用SourceTree这样的界面来下载、更新和上传代码,并没有指定可持续发展的流程,这样实际上带来的问题很明显,就是维护代码的成本会比较高。

例如我曾经接手过一个这样的项目,由于没有很好的流程规范,以至于生产环境上的程序产生了bug,竟然不知道这个程序对应于代码仓库上的哪一次提交,进而在排查问题前,需要通过对比程序的部署日期和提交日期来确定,如果这一天有多次提交,还要先编译不同的提交,并核实MD5值来确定,这种开发效率实在是低得可以。

制定git工作流的目的也是为了提高效率,使代码仓库的管理简洁明了,让开发者专注于业务的开发上,经过一段时间的实践,我主要采用的是gitlab工作流来管理项目,下面分2点介绍一下:

  1. gitlab工作流
  2. bugfix如何处理

gitlab工作流

gitlab是一个非常优秀的开源软件,对github比较了解的同学都知道,gitlab实际上是私有版的github,gitlab的工作流是建立在分支的基础上的,在服务器开发的场景下,我们一般需要额外建立2个分支:pre-production分支和production分支,pre-production分支是预发布环境,主要用来模拟生产环境的测试,而production环境则是生产环境

image.png

有了这两个分支,就可以制定提交的流程了,团队里的每个人都按照这样的流程来维护代码,就不会出现混乱、难以管理等问题

  1. 创建一个issue,同时在issue页面拉出一个分支
    在上一篇里我说过,由于git的分支非常轻量,所以每个改动都可以新建一个分支,修改完成后再合并到主分支中去,那issue是什么呢,issue是这次修改的详细描述,例如描述这次修改是一个新的功能,还是一个bug修复,这次修改的目的是什么,如何完成这次修改。同时它可以关联一个分支,最终这个分支的提交、合并等整个过程都可以由这个issue来追踪。
    创建issue

    在issue下创建分支

    分支创建好后,可以在终端执行git fetch origin master把新创建的分支拉到本地,这样就可以在本地通过新的分支开发新功能了。

这里需要注意的是,一个issue的开发周期不宜过长,最好控制在1天,否则跨了多天的提交,最后合并起来会带来很大的麻烦。

  1. 提交代码
    开发完成后,就可以把代码提交到对应的远程分支上了,如果你设置了gitlab CI,提交后还会触发对代码的编译、测试等步骤,这取决于你的CI的具体设置,目的也是为了保证你的提交质量。关于CI,这里就不多讲了,有机会我再写一篇相关的文章。
  2. code review
    提交代码后,我们需要让团队里的其他小伙伴对代码进行review,code review的好处很多,除了可以帮助统一团队的编码格式之外,还可以帮助检查一些显而易见的错误,最大的好处是提升了团队对业务的理解水平,而不是各自负责一个模块,形成了孤岛。gitlab提供了很好的code review功能,它不仅会对代码修改点进行区别的显示,同时还可以在代码上进行注释,这些注释,开发者需要逐个solve掉,否则被认为是不能合并到主分支上。
  3. 合并代码
    通过了层层的审核,最后终于可以合并到主分支上了,当然这一步可以和第3步一起完成,即先创建Merge Request,然后项目管理者在合并代码前,先进行code review,通过后再允许合并到主分支上。

以上便是日常开发代码的基本流程,可以涵盖了开发工作中涉及git操作的80%的内容,剩下20%在哪里?你就要了解后面的内容了

bugfix如何处理

bugfix主要是修复生产环境中发现的bug,找到解决思路后,我们一般需要以下步骤去完成这个任务:

  1. 找到生产环境上对应的具体commit_id
  2. 创建bugfix类型的issue和分支,并回退到第1步的那个commit
  3. 修改代码,打补丁
  4. 测试
  5. 将补丁合并到master分支上
  6. 用修改后的程序替换掉生产环境上的程序

以上步骤中,如果没有很好的工作流,第1步和第6步是比较难操作的,第1步上文已经说过了,第6步为什么难操作呢,因为它需要手动将修改后的代码与master分支的代码对比后,合并到master上,为什么要手动呢,因为git是不允许从一个旧的提交向较新的提交上合并的,你可能会问:能不能不这么原始呢,因为手动对比真的是很费时。答案是有的,有个概念叫cherry-pick,可以完成这样的功能,但问题就在这里了,这个概念大多数人平时是没有接触过的,而且即便看过书,也很难理解它到底有什么用,即把它应用到工作中的概率极低。

使用gitlab工作流后,可以很好的改善以上的窘境,因为每次你合并代码,都会有个大大的cherry-pick按钮弹出来,好奇心的驱使,会让你迟早知道这功能是怎么回事儿。说了不少废话,下面说下gitlab工作流怎么完成bugfix的流程。

还记得之前我们创建的3个分支吗,其中production分支里的所有提交,都对应于生产环境中的一个版本,那么以上的第1步就很好解决了,很快便可以找到生产环境上的版本对应的那个commit_id。下面还需要修改下第5步的内容:

  1. 将代码合并到production分支,合并完成后,cherry-pick到master分支上

下面三个截图是整个合并过程

打补丁,合并到production分支(截图是release分支,是一回事),注意这里不要勾选Remove source branch选项,勾选了就无法进行cherry-pick了


合并到production分支

合并成功会弹出Cherry-pick对话框



将补丁Cherry-pick到master分支上

以上便是开发工作中,几乎可以全部覆盖的涉及到git的工作流程,遵守这一套流程,可以让我们的开发协作更为高效,下一篇,我会介绍一下CI和git如何结合,及如何进行开发过程中的版本管理。

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

推荐阅读更多精彩内容

  • 点进来的,不是正在失恋,就是失恋过。失恋不是大事,就像牙疼不是病一样。个中滋味,自己体味。 我认识唐雪是通过一个新...
    绿喵咪阅读 1,872评论 16 11
  • 早上醒来第一件事看手机,各种相似的新年祝福,同时看到写作群的交作业通知,心里有些小紧张,开始了,像昨天一样的今天会...
    美丽的小鱼阅读 178评论 0 0
  • 五年前我在上大二,偶然间认识一群读书人,年纪比我大许多,大家曾探讨过家庭亲子关系问题。当时的我还未曾对心理学产生太...
    Nerdie阅读 348评论 0 0
  • 是不是一开始你以自己的最好去待人,你若是稍微有点不那么好了,他们就认为你自私自利并开始排挤你。人到底该怎么做呢,做...
    123lili阅读 327评论 0 0
  • 新一年开始了,年终奖即将到手,又有不少人跑来问熊太太新一年投资什么好?买什么股票/基金好?面对0基础的理财小白,除...
    熊太太的梦想清单阅读 644评论 5 9