专栏首页大愚Talk团队开发Git分支管理策略

团队开发Git分支管理策略

开发生涯的前三年都是使用 svn,回首放佛如前世。自从用了 git ,整个人都神经了。

下面的内容肯定不是什么教你如何用git提交代码,合并分支之类的。现在本人要从写术的层面提升一下自己文章的品质到道的层面

使用git带来的分支疑惑

git 为什么好,为什么要用 git,这不是我本文想要说明的问题。

这里想要给大家分享一下自己使用过程中产生的疑惑,以及解决的这些疑惑的过程。话又说回来,我现在依然充满疑惑。真不知道30岁的时候会不会不惑。

在使用 git 过程中,它的分支功能让我真的欣喜若狂,不过这是把双刃剑,一不小心你会得到这种git路径图:

图片来源:阮一峰老师博客

我的疑惑:

  1. 那么团队中我们该使用怎样的分支策略来进行开发协作?
  2. 在多人的团队中,我们应该在 master 分支上直接开发吗?
  3. 如果线上产生了bug该通过什么样方式的分支去修复?
  4. 当有多个分支的时候,测试如何有效的参与进来每一个分支的测试?

用成熟的工作流来解决问题

在解答上面的疑惑前,先介绍几个工作流,然后通过工作流的模式,来进行解答。因为我们必须在某种设定的情景下,才能讨论解决问题的思路。

下面三种工作流方式,都是采用功能驱动开发,也就是先有需求产生,然后诞生对应的分支,然后开发,最后合并回来,完成使命被删除。

  • Git flow
  • Github flow
  • Gitlab flow

关于这三种工作流的详细介绍,建议看看这篇文章-阮一峰

我现在采用的是 Git flow ,经过自己的实践,确实好用,解决不少问题。然后如果发现与自己的实际情况有些出入,可以根据需求做出些变动调整。

我的选择

我选择了 Git flow,它的主要特点是,长期存在两个分支:

  • 主分支master
  • 开发分支develop

然后,存在三种辅助分支,都是短期的,并且一半情况下只应该存在本地,不要提交到远程库。

  • 功能分支(feature branch)
  • 补丁分支(hotfix branch)
  • 预发分支(release branch) 在进行上面的分支时,建议的命名规范:feature-xxx、release-xxx、hotfix-xxx

话外:我以前喜欢用下划线,后来发现打中线不需要按 shift ,哈哈,从此开始中线时代。

什么时候要功能分支?

当你拿到一个需求,或者不是一个立马需求上线的bug修复,那么就应该从 develop 开一个分支出来,完成这部分工作。完成后合并到 develop 分支。

什么时候要预发分支?

这个分支是为预发准备的,测试的介入,也只应该在该分支产生时才介入。当我们不管是新功能开发,还是一般的bug修改都差不多了。就应该从develop产生一个release分支,交给测试,如果有bug直接在上面修改。全部完成后,合并回develop,并且合并到master

关于这个分支我得再多说几句。因为这是非常重要的一步,如果我们使用了 git 钩子,当合并到 master 的时候,会自动发布到线上,所以这是临上线的最后一道屏障。

同时这里也解决了我一个疑惑,测试如何参与到git的每个分支中来?答案是:测试不应该参与到每个分支中来,只应该参与到release分支中去。其它的开发分支,都应该由开发人员自己测试,测试没有问题的时候才准许合并到develop,这就要求每一个开发要提高自己交付的产品质量,如何确保自己交付的产品质量?自动化测试是个不错的选择,好了,打住,这不是咋们今天的主要任务,这个话题改天再聊。

什么时候需要补丁分支?

这种情况越少越好。因为它产生的原因是:线上出了bug,并且必须马上修复,不管你身在何方,当手机响起,拿出电脑改bug吧。

它与release 很像,都需要完成后,同时合并到:masterdevelop。不同的是,它需要从master 上开一个分支出来。

注意这里没有测试的介入,一半来说都是代码上某一个小的紧急bug,虽然很严重,但是可以很容易改动。当然如果有一些例外情况,应该让测试进行测试后再合并、发布。

总结

git 开发很好用,但是要按照一定规则合理使用分支。

另外,除了:masterdevelop 分支,其它分支都不应该出现在远程仓库中。

git一定要结合它的各种钩子来使用,提升开发效率。这里后面来介绍下。

参考资料:

  • [1]Git 工作流程
  • [2]介绍一个成功的 Git 分支模型

介绍

我是何磊,主要工作就是写代码,持续创业者(之所以持续是因为到现在还没有干成功过一件事)。如果你有兴趣欢迎关注我,我会分享技术,还有生活,当然还有我创业的故事(说出我的痛,让你开心一下)。

本文分享自微信公众号 - 大愚Talk(dayuTalk),作者:何磊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高并发架构的CDN知识介绍

    对一次网络请求过程的了解程度,一是展现你的专业知识;二是深刻的理解,让你在大型网站架构中做出更适合、可靠的架构。而DNS是这一切的出发点,本文结合一张常用架构图...

    大愚
  • 我对变量产生了这些想法

    最近在学习Golang的过程中,发现一个有意思的事情,有的文章说函数调用传参时 slice 是引用传递,有的说是值传递。为什么同一个东西大家会不同认识?为了搞清...

    大愚
  • 走进Golang之Context的使用

    例子大概意思是说,有一个获取订单详情的请求,会单独起一个 goroutine 去处理该请求。在该请求内部又有三个分支 goroutine 分别处理订单详情、推荐...

    大愚
  • 您必须知道的 Git 分支开发规范

    Git 是目前最流行的源代码管理工具。 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作

    用户1687375
  • Gitflow工作流程

    原文链接:https://www.atlassian.com/git/workflows#!workflow-gitflow 译文链接:http://blog....

    程序猿DD
  • git: 简洁高效 的 双分支式 git flow (master + dev)

    使用 git branch (git 分支)进行版本控制,可以让大家有效地合作,使得项目井井有条地发展下去。

    JNingWei
  • Git知识总览(六) Git分支中的远程操作实践

    前几篇博客陆陆续续的讲了好多关于Git操作的内容, 其中在上篇博客聊了《Git中的merge、rebase、cherry-pick以及交互式rebase》,本篇...

    lizelu
  • git使用教程7-pycharm 使用 git merge 合并分支

    前面一篇已经用 pycharm 创建了分支,当我们在某个分支上代码开发完成,代码测试没问题后需要把分支上的代码合并到 master 分支上。 这样保证 mast...

    上海-悠悠
  • Git设置分支保护实现CodeReview卡点

    在Git的分支合并过程中支持方式,一种是在本地将source branch 合并到 target branch,然后再切换到target branch后将tar...

    Criss@陈磊
  • git删除本地分支

    远端master分支有更新需要拉取至本地,但是代码有些地方做了修改导致了小冲突,但是这些修改又是无关紧要的,于是就打算直接删除掉本地分支再重新拉取master分...

    我是十三

扫码关注云+社区

领取腾讯云代金券