Git进阶系列 | 3. 基于Pull Request实现更好的协作

news2024/9/29 7:27:54

Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章,这是第3篇。原文:Better Collaboration With Pull Requests[1]

本文是“Git进阶系列”的第三篇,将介绍pull request这一对大型和小型开发团队都很有帮助的超棒特性。Pull request不仅改进了评审和反馈过程,还有助于跟踪和讨论代码变更。最后重要的一点是,pull request是向其他没有写访问权限的代码库贡献内容的理想方式。

Git进阶系列:

  1. 创建完美的提交
  2. Git中的分支策略
  3. 基于Pull Request实现更好的协作(本文)
  4. 合并冲突
  5. Rebase vs Merge
  6. 交互式Rebase
  7. Git中的Cherry-pick提交
  8. 用Reflog恢复丢失的提交

什么是Pull Request?

首先需要知道,pull request不是Git核心特性。相反,是由使用的Git托管平台提供的,GitHub、GitLab、Bitbucket、AzureDevops以及其他平台都提供类似的内置功能。

为什么需要创建pull request?

在我们讨论如何创建完美的pull request的细节之前,先来讨论一下为什么需要这个特性。

假设我们刚刚完成软件的一个新特性,也许之前一直在特性分支中工作,因此下一步将是将其合并到主线分支(master分支或main分支)。在某些情况下,比方说你是项目中唯一的开发人员,或者有足够的经验并确定团队成员不会提出异议,那么直接合并一点问题都没有。

alt

不过如果代码变更稍微复杂一点,并且希望其他人能够检查这部分工作,该怎么办呢?这就是pull request的目的。有了pull request,可以邀请其他人来评论所作的工作并给出反馈。

alt

一旦创建了pull request,就可以和其他开发人员讨论相关代码。大多数Git托管平台允许其他用户在此过程中添加评论以及提出建议,当评审人员批准后,就可以将其合并到另一个分支中。

alt

评审工作流并不是创建pull request的唯一原因。如果想对其他没有写访问权限的代码库做出贡献,用pull request就会很方便。想想所有的开源项目,如果你有一个新特性的想法,或者如果想提交一个补丁,pull request是一个很好的方式来展示想法,而不必加入这个项目并成为主要贡献者。

这就引出了一个与pull request紧密相关的话题: fork。

用fork工作

fork是现有Git代码库的个人副本。回到之前关于开源的示例,第一步是创建原始代码库的副本(fork),之后就可以在自己的个人副本中更改代码。

alt

一旦完成,就可以创建一个pull request,要求原始代码库的维护者采用你的更改。维护者或其他主要贡献者可以检查相关代码,然后决定是否采用。

alt

重要提示: Pull request总是基于分支,而不是单个提交!创建pull request时,需要基于一个特定的分支并请求采用。

让审阅者的生活更轻松: 如何创建一个优秀的pull request

如前所述,pull request并不是Git的核心特性。相反,每个Git平台都有自己的设计以及关于pull request如何工作的想法。这些设计在GitLab, GitHub, Bitbucket等平台上看起来都不太一样,每个平台都有略微不同的工作流,用于跟踪、讨论和审查更改。

alt

无论使用什么代码托管服务,Tower Git客户端这样的桌面GUI能够提供一致的用户界面,让这一切都变得更容易。

alt

尽管如此,一般的工作流程都差不多,包括以下步骤:

  1. 如果你没有对代码库的写权限,第一步是创建一个fork,也就是个人版本的代码库。
  2. 在fork的代码库中创建新的本地分支。(提示: pull request是基于分支的,而不是提交!)
  3. 在本地分支中进行变更并提交。
  4. 将变更推送到自己的远程代码库。
  5. 创建一个包含相关变更的pull request,开始与他人讨论。

我们看看pull request本身,以及如何创建让其他开发人员的生活更轻松的请求。首先应该简短,以便快速审阅,当面对3000行代码而不是30行代码时,就很难理解代码了。

其次,确保添加良好的、不言自明的标题和有意义的描述。试着描述做了哪些更改,为什么创建pull request,以及这些更改对项目的影响。大多数平台都允许添加屏幕截图来帮助展示这些变化。

批准、合并还是拒绝?

一旦变更被批准,你(或具有写访问权的人)就可以将分支合并到主分支中。但是,如果审阅者不想在当前状态下合并pull request,该怎么办?嗯,你可以等会儿,也可以将新的提交推送到那个分支上,这样现有的pull request也会更新。

此外,维护者或其他具有写访问权限的人可以在不想合并更改时拒绝pull request。

开发人员的安全网

如你所见,pull request是与其他开发人员沟通协作的好方法。通过让其他人检查所作的工作,可以确保只有高质量的代码进入代码库。

如果想更深入了解高级Git工具,可以免费查看“Advanced Git Kit[3]”: 这是关于分支策略、交互式Rebase、Reflog、子模块等主题的短视频集合。

References:
[1] Better Collaboration With Pull Requests: https://css-tricks.com/better-collaboration-with-pull-requests/

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

- END -

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

本文的开发环境为 Keil Cortex-M3 内核处理器。 重定向 fputc 函数方法 如果想使用库函数 printf ,必须要将 fputc 重定向到自己的串口上。 术语 重定向 可以理解为用户重写 fputc 函数,在重写的函数体内调用自己硬件的串口发送函数。 在 Keil 环境中…

Android Binder通信原理(二):servicemanager启动

源码基于:Android R 0. 前言 下图是android 8.0 之前binder 的软件框架,依赖的驱动设备是/dev/binder,binder机制的四要素分别是client、server、servicemanager和binder驱动。 对于android 8.0后的binder 和vndbinder依然同这个框架&#…

【Python版】手把手带你如何进行Mock测试

什么是mock? mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因为真…

js+html+css 封装一个弹窗组件

HTML中通过一个按钮触发显示弹窗的函数showPopup(),弹窗的内容包含在一个div元素中,初始设置为隐藏状态。 CSS中定义了弹窗的样式,包括背景、位置、边框等。 JavaScript中定义了两个函数showPopup()和hidePopup(),分别用于显示和隐…

CORS原理及解决办法

浏览器的同源策略阻止读取来自不同来源的资源。这种机制阻止恶意站点读取另一个站点的数据,但它也阻止合法使用。 一般情况下,我们可以通过两种方式解决浏览器的同源策略,JSONP和CORS,CORS解决方案更为通用(推荐)。 …

算法程序设计 之 胖男孩问题(7/8)

一、题目分析 问题描述 麦克结婚后,在上个月他胖了70磅。因为手指上的脂肪过多,使他连给他最亲密的朋友斯拉夫克写一个电子邮件都很困难。 每晚麦克都详细地描述那一天他所吃的所有东西,但有时当他只想按一次某键时往往会按了不止一次&…

java 读取图片中的文字

Maven依赖导入Tess4j <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j --><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version></de…

基于SpringBoot的二手书交易系统的设计与实现(源码、数据库、文档)

作为新兴事物&#xff0c;校园电子商务是&#xff0c;首先是指在校园范围内&#xff0c;其技术手段是校园网&#xff0c;而服务对象是全部师生。主要经营形式为学生自主经营&#xff0c;能够满足多群体生活学习需求&#xff0c;同时具备范围小&#xff0c;安全性高&#xff0c;…

《Web应用技术》期末复习(END)

说明&#xff1a;不知道是哪位兄台在群里说了一句&#xff0c;整的我压力山大。这是我个人的期末复习梳理&#xff0c;自己使用并且提供给几位有需要的朋友使用&#xff0c;并不确定期末考试考不考这些。请大家视情况查看和使用&#xff0c;如果有错误&#xff0c;也欢迎大家找…

opencv如何使用GPU的三种方法

我在工作实验涉及到图像和视频处理时&#xff0c;通常使用opencv提供的库来做处理&#xff0c;虽然OpenCV是一个广泛使用的库&#xff0c;它提供了丰富的功能和工具。然而&#xff0c;有时候在处理大量图片或视频时&#xff0c;我们可能会面临速度受限的问题。 opencv执行图像…

SpringMvc拦截器入门

文章目录 前言五、拦截器入门1.拦截器简介2.拦截器入门案例3.拦截器参数4. 拦截器链配置 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果能帮到一些萌新进行新技术的学习那也是极好的。作者…

管理Linux目录、用户、组以及文档的权限和归属

文章目录 一、管理Linux目录和文件1、查看及切换目录pwd&#xff1a;查看当前工作目录cd&#xff1a;切换工作目录ls&#xff1a;列出文档及属性alias&#xff1a;别名cat查看文件内容less分页显示长文件 2.新建目录/文件mkdir 创建目录touch创建文件 3.删除/移动/复制rm删除mv…

ai描述生成器绘画有哪些?ai绘画生成器描述介绍

从前&#xff0c;有一个名叫小华的画家&#xff0c;他是一位非常出色的艺术家&#xff0c;但是他总是感到自己还没有达到他理想中作品的水平。他一直在寻找一种方法来创造出高质量的艺术品。有一天&#xff0c;他听说了一种神奇的技术&#xff0c;可以让计算机通过人工智能生成…

MySQL全备+binlog恢复方法之伪装master

利用mysql全备 binlog server恢复方法之伪装master 单实例试验 一、试验环境 10.72.7.40 实例 mysql3306为要恢复的对象&#xff0c;mysql3306的全备binlog server&#xff08;目录/data/mysql/mysql3306/backup&#xff09; 实例mysql3307为伪装master 实例mysql3308为伪…

黑马程序员前端 Vue3 小兔鲜电商项目——(四)Home 页面布局

文章目录 Home 页面组件结构组件结构拆分Home 模块中引入组件 分类实现模板代码渲染数据 banner 轮播图实现模板代码封装接口渲染数据 面板组件封装创建公共组件复用抽取主题和副主题 新鲜好物实现模版代码封装接口渲染数据 人气推荐实现模板代码封装接口渲染数据 懒加载指令实…

Java实现加密(五)Base64编码

目录 一、Base64是怎么诞生的二、Base64定义三、Base64原理1.ASCII码转Base64&#xff08;字节数 % 3 0&#xff09;2.ASCII码转Base64&#xff08;字节数 % 3 2&#xff09;3.ASCII码转Base64&#xff08;字节数 % 3 1&#xff09;4.UTF-8转Base64 四、Java实现Base64编解码…

Android Binder通信原理(一):简介

源码基于&#xff1a;Android R 0. 前言 在Linux 系统中现有的进程间通信&#xff08;IPC&#xff09;方式&#xff1a; 管道(PIPE)&#xff1a;在创建时分配一个page大小的内存&#xff0c;缓存区大小比较有限&#xff1b;命名管道(FIFO)&#xff1a;考虑 PIPE_BUF 和原子操…

华为流程体系:IPD流程之敏捷开发(限制版)

目录 前言 敏捷 逐步采用敏捷原则 专栏列表 CSDN学院课程地址 前言 今天继续来谈谈 IPD 体系中敏捷开发所涉及的一些相关内容。 无论是硬件产品的开发过程&#xff0c;还是在应用或者是学习 IPD 的过程中。 瀑布式流程几乎都是标配。 这其实跟硬件产品或者是传统 IPD …

ROS:配置VScode

目录 前言一、下载二、vscode 安装三、vscode 集成 ROS 插件四、vscode 使用4.1 创建 ROS 工作空间4.2启动 vscode4.3vscode 中编译 ros4.4创建 ROS 功能包4.5C 实现4.6python 实现4.7配置 CMakeLists.txt4.8编译4.9执行 前言 VSCode 全称 Visual Studio Code&#xff0c;是微…

关于华为云服务器安装宝塔面板后,点击终端无响应解决方案

问题再现: 下面是我沟通宝塔客服后&#xff0c;给的解决方案。 我在百般无奈的情况下、卸载了宝塔后&#xff0c;最终躺平&#xff0c;选择了问宝塔官方客服 1、从华为提供的远程登录方式选一种 二、输入服务器密码通过ssh远程登录 服务器 二、执行宝塔官方提供的 命令执…