在团队中使用Pull Request来管理代码

前言

在参加多人共同开发项目,且选用Git作为代码托管工具的时候,我们不免会遇到分支冲突、覆盖、合并等问题。显然,因为同一个仓库是属于大家的,所以每个人都有权限向仓库中push或者pull数据。但是这样难免会带来混乱,在人数较多的时候,更是容易出现问题。

目前,在很多团队项目中,都使用Pull Request(GitLab称为Merge Request)来进行Code Review。Pull Request是一种有效的管理源代码的方式,尤其是在许多人一起贡献源代码的时候,显得尤为重要。

Pull Request的优点:

  • Auto Merge功能。哪怕两份代码并非在最新的master分支情况下进行修改,Pull Request也会智能识别,将多份来自于不同分支的代码进行合并。
  • Code Review功能。开发者提交上去的代码可由管理者进行复审。复审过程中出现的任何问题,可以直接在commit中进行指出,也可以引用相关代码行来指出问题,交流方便。
  • 与Issue的绑定功能。Pull Request可以与Issue进行绑定,相当于指定了完成某个Issue所修改的代码,在回顾时可以较为清晰的看到代码变化。

下面,将介绍Pull Request模式的工作流程。

提出需求

所有的任务、需求、Bug修复都以Issue的形式呈现。管理员、开发者、测试员等都可以创建Issue。

Github的创建Issue界面如图所示,左侧主要填写需求的具体内容,支持Markdown。

右侧可以将需求直接指派给某位开发者。如果不指派,开发者也可以选择认领任务。

右下角有Linked Pull Request,可以将与该Issue相关的Pull Request与此Issue构建联系,若Pull Request通过,则代表该Issue被完成。

开发者操作

在该工作模式下,master分支是受保护的——任何开发者都无权直接修改master分支,哪怕是管理员也不应当对master分支进行直接修改,否则会造成混乱。

那么,如果开发者想要修改master分支中的内容怎么办呢?

  • 从master分支创建出去一个属于自己的分支,用作开发者自己进行调试的开发环境。

    开发分支的建议命名格式:操作者姓名--操作内容,如guojun--add-readme。千万不要命名为dev1,dev2这种毫无信息量的名字,否则修改记录将难以追溯!

    (master) git checkout -b guojun--add-readme
  • 修改开发分支中的内容,本地测试,push到开发分支。

    (guojun--add-readme) git add --all
    (guojun--add-readme) git commit -m "add README.md"
    (guojun--add-readme) git push -u origin guojun--add-readme
  • 最重要的一步,提交Pull Request到master分支

你可以输入一些关于这个PR的说明,以供其他人进行Review。

PR上传之后,等着组内专门的Reviewers来进行Review吧。

对于不同的仓库,例如前端、后端等,Reviewers可以是测试人员,也可以是PM。

代码复审

我们切换到Reviewers界面。

此时,Reviewers若对代码不满,可以在对应的代码出标出,让开发人员继续修改。若没有问题,且出现图中绿色的画面(和基础分支不冲突),则可以进行Merge。

恭喜!这样代码就Merge完成了。一般情况下,需要删掉PR所创建的开发分支。

另外,如果Merge过程中出现冲突,如多个PR修改了同一份文件,GitHub还提供网页版编辑器供Reviewer去选择应该保留哪些、不保留哪些。

以上就是开发者进行源代码修改的整个过程。

[技术博客]在团队中使用Pull Request来管理代码的更多相关文章

  1. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

  2. 40个国人iOS技术博客

    40个国人iOS技术博客 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xm ...

  3. 转: BAT等研发团队的技术博客

    BAT 技术团队博客   1. 美团技术团队博客:  地址: http://tech.meituan.com/ 2. 腾讯社交用户体验设计(ISUX) 地址:http://isux.tencent.c ...

  4. C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客

    C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客 C++中实现对map按照value值进行排序 2012-03-15 15:32:36 标签:map 职场 休闲 排 ...

  5. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

  6. [技术博客] Django中文件的保存与访问

    [技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...

  7. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  8. 作业一:创建个人技术博客、自我介绍、简单的C程序

    年9月14日中午12点: 一.主要内容  建个人技术博客(博客园 www.cnblogs.com) 本学期将通过写博客的方式提交作业,实际上,最终的目的是希望同学们能通过博客的形式记录我们整个学习过程 ...

  9. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

随机推荐

  1. 2021-06-14 BZOJ4919:大根堆

    BZOJ4919:大根堆 Description: 题目描述   给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你 ...

  2. Robot Framework(9)- 使用变量文件

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 啥是变量文件 变 ...

  3. Activiti 学习(一)—— Activiti 基础

    工作流概述 在一个公司中,每一项业务的开始和结束,都可以理解为一个工作流,例如,公司的费用报销的基本流程如下: 如图所示的工作流:员工先提出费用报销申请,提交该申请给部门领导,部门领导审批后,再提交给 ...

  4. 快速搭建SSM基本项目

    快速搭建SSM项目基本手脚架 Maven构建项目 一般我们使用Maven来管理我们的项目: 导入相关依赖配置pom.xml: <?xml version="1.0" enco ...

  5. 如何实现自定义sk_buff数据包并提交协议栈

    目录 一.自定义数据包的封装流程 1. 分配skb 2.初始定位(skb_reserve) 3.拷贝数据(skb_push / skb_pull / skb_put / ) 4.设置传输层头部 5.设 ...

  6. PTA——c++函数

    1.在C++中,关于下列设置缺省参数值的描述中,()是正确的. 在指定了缺省值的参数右边,不能出现没有指定缺省值的参数: 2.使用地址作为实参传给形参,下列说法正确的是() 实参与形参操作的是同一对象 ...

  7. Eclipse中快速生成Javabean的方法

    总结一下: 先写出属性 无参构造器:Alt+/ 再按回车 全参构造器:Alt+Shift+S 再按字母O键 再按回车 toString方法:Alt+Shift+S 再按字母S键 再按回车 get/se ...

  8. 自己实现一个Controller——精简型

    写在最前 controller-manager作为K8S master的其中一个组件,负责众多controller的启动和终止,这些controller负责监控着k8s中各种资源,执行调谐,使他们的实 ...

  9. CentOS8部署tftp

    tftp:简单文本传输协议,而ftp:文本传输协议.可以把tftp看成是ftp的精简版.tftp用于免登录传输小文件,tftp服务端监听在udp协议的69端口tftp简单的工作原理: tftp服务端与 ...

  10. 记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?

    开心一刻 今天我爸.我.我女儿一起吃饭,我们每人一个鸡腿 女儿问道:爸爸,你吃鸡腿吗 我以为她要把她的鸡腿给我吃,倍感欣慰地说道:我不吃,宝贝 女儿一把抓起我的鸡腿放进了她爷爷的碗里,说道:不吃给爷爷 ...