第十七章 管理组件库的pull request

news2024/9/21 4:28:43

一个好的项目很少会由一个人来独立完成。即使你完成了所有功能实现,也需要有人给你 Review 和提建议、找 Bug。比如添加新的组件、完善文档、添加单元测试、提出改进意见。

这节课我们就介绍一下如何参与开源社区的代码贡献。对于任何一个开源项目,我们都是以陌生人的身份参与的。也就是说,你并不是项目组成员,不具备直接提交代码的权限。如果你想参与其中,最好的方式就是提交 PullRequest,等你有一定贡献的话再请求成为项目成员。


什么是 PullRequest?

PullRequst 直译过来就是拉取请求,那么拉取请求和提交代码有什么关系呢。

这里面有一个比喻,我们可以把代码比作一个团队,对于一个陌生人来讲,你很难获取信任,让你直接插手团队的管理。这个时候上帝给了你一次证明的机会,就是复制一个一模一样的团队给你。

你经过一段时间的优化管理后,可以把你的复制团队和原有团队的对比记录发送给原团队的管理者证明你优化的效果,请求将你的改进合并到原团队之中,这种行为就是代码世界的 PullRequest。显然这个世界上并没有上帝,但是代码本身是有可复制性的,可以很轻松地复制一份,这个叫做 fork。你改进后提交的合并请求就叫做 PullRequest,是你的复制分支和原分支的对比记录 + 你对改进的描述。
在这里插入图片描述

假设你要给VUE的组件库提交代码,在 GitHub 中的 PullRequest 步骤如下:

  1. 从VUE组件库 fork 代码仓库到你的仓库;
  2. 从自己仓库 clone 到本地;
  3. git add 添加你修改的代码到暂存区
  4. 提交 commit 你的更改;
  5. Push 到你的的代码仓库;
  6. 给VUE的组件库提交一个 PullRequest (拉取请求),说明你的修改内容,请求该组件作者提交。作者认为属于有价值提交的话,就会点击接受。则 Github 会将这次修改拉取到然叔的项目,这样的话就相当于给然叔组件库提交了一次代码贡献。

简单地说,整个代码贡献过程可以认为是复制 ==> 修改 ==> 提交拉取请求 ==> 接受请求。

一般我们用这里面的关键一步 PullRequest 当做整个代码贡献行为的简称。现在大家就比较清楚为什么说参与开源项目叫提 PR。


Fork 代码

Fork 实际上就是复制的意思。在 Github 中相当于将组件作者 账号中的 项目复制了一份到 自己 账号中。

在这里插入图片描述


在这里插入图片描述

点击 【Create fork】就可以了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0qzX6wS-1669487626308)()]

新创建的代码在 你自己账号下,这个代码和自己常见的几乎没有差别,只是在界面上多了一点内容:

  • 来源: 表示项目复制得哪个地址;
  • 提交贡献: 这个按钮是 PullRequest 用的;
  • 同步: Sync fork,这是一个新功能,用于将源地址的最新提交拉取回本地址。

Clone 代码到本地

使用Git命令克隆代码

git clone git@github.com:geniusguys/study-ui.git

然后修改你想修改的代码,然后提交代码

在这里插入图片描述

然后在push你的代码在你的远程仓库

在这里插入图片描述

提交代码后,回到自己远程仓库的 Github 页面。这个时候就可以看到这个提交。这是一个新的功能,可以更方便你提交 PullRequest。

在这里插入图片描述

点击 【Contribute】中的 【Open pull request】按钮,就可以创建一个新的 PullRequest 了。

在这里插入图片描述

在 pull request 界面中可以看到提交的方向。这里面表明是从 自己的仓库分支 向 组件作者仓库分支 提交代码。当然这里面方向和分支都可以选择,多分支通常用于你同时要处理很多个 PullRequest 的情况,目前只处理一个分支就没有这么麻烦。

在这里插入图片描述

另外,你也可以从后面的比对中清楚地看到你修改的内容。

在这里插入图片描述

点击 【Create pull request】后,这个pullrequest 就创建成功了。这时组件库作者就收到了你的 pullrequest。


审核代码修改

当有人给组件库提交了代码贡献,其作者就可以很容易地在 【PullRequest】中看到。

在这里插入图片描述

打开后可以查阅代码变更,也可以清楚地看到这个代码 CI 运行的结果。通过这个结果就可以判断代码是否正确,也可以提出一定的改进意见,让你继续进行修改。

在这里插入图片描述

假设认为你的修改是有价值的,就可以批准你的修改。点击 Merge pull request 就可以接受这次代码合并。这时,你的代码也就合并到了 组件库作者的 仓库中了,这次代码贡献宣告胜利结束。

在开源世界中,每个人都是互不相识的。开源世界中的合作也是从陌生人到熟人的过程。有趣的 Github 给我们提供了一种陌生人参与代码贡献的可能,可以通过代码来证明自己、实现自己的价值。

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

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

相关文章

map容器/multimap容器

目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 5. map查找和统计 功能描述 函数原型 6 map容器排序 学习目标 主要技术点 1.map基本概念…

web入门-爆破

文章目录web21web22web23python脚本php脚本web24web25web26web27web28web21 进入网站,提示要登陆,妥爆破 抓包 注意到最下行的base64编码 发现就是刚刚输入的账号密码 因此这里就是要选择爆破的地方了 发给inruder,添加爆破位 载入题目给…

【坚持不懈的每日一题——力扣篇】1774. 最接近目标价格的甜点成本(中等)-- dfs / dp

GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review 公众号:URLeisure 的复习仓库 公众号二维码见文末 以下是本篇文章正文内容,下面案例可供参考。 一、题目描述 力扣今天推的每日一题是道中等题 。 示例…

qt人员管理模块(模块化程序)功能块复制直接使用不冲突

一、前言 qt对人员管理部分个人总结的模块化程序,直接按照步骤复制粘贴程序,直接实现人员管理功能,无需花费脑筋在理清各个思路,适合快速编写组装程序 二、环境 windows qt5.7 sqlite3 三、正文 思来想去大半天,…

JS快速入门

一、JS介绍 JavaScript (简称JS),是一门跨平台、面向对象的脚本语言(弱类型语言),而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的…

自定义RBAC(1)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 在对Spring Security稍做了解之后,可以知道,Spring Security其实只是一个实现认证授权的框架,封装了很多实现细节。但也有一些…

【Linux网络编程】服务端编程初体验

文章目录前言服务端是啥、有什么特点核心函数socket的简介服务器编程客户端代码The End前言 在上节课(Linux网络编程初体验)中我们实现了连接bilibili的功能,并获取其html源码 如图所示. 今天我们要自己编写个服务端来服务我们的客户端 提示:以下是本篇…

SGI STL 二级空间配置源码刨析

文章目录内存分配第二级配置器空闲链表的设计内存申请代码内存释放代码注意内存分配 当我们new一个对象时,实际做了两件事情: 使用malloc申请了一块内存。执行构造函数。 在SGI中,这两步独立出了两个函数:allocate申请内存&…

年产20吨鸡枞菌产品的生产工艺设计(lunwen+课题登记表+cad图纸)

目录 摘 要 1 Abstract 2 一、设计任务和内容 4 1.1 设计题目 4 1.2 设计原始数据 4 二、设计说明 5 2.1 全厂总平面布置 5 2.1.1 原料厂及堆场 5 2.1.2 生产区 5 2.1.3 厂前区 6 2.1.4 动力区 6 2.1.5 辅助车间 6 2.1.6 仓库区 6 2.2 三废的处理及回收 6 2.3 车间布置说明 6 三…

Request和Response基础知识入门

文章目录1,Request和Response的概述2,Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…

【Unity3D】绘制物体表面三角形网格

1 仅绘制三角形网格 1)创建游戏对象 创建一个空对象,重命名为 Grid,并在其下添加需要绘制网格的对象,如下: 场景显示如下: 2)添加脚本组件 GridController.cs using System; using UnityEngin…

JavaWeb_第4章_RequestResponse

JavaWeb_第4章_Request&Response 文章目录JavaWeb_第4章_Request&Response1,Request和Response的概述2,Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数…

【ceph】分布式存储ceph

1 块存储,文件存储,对象存储 1.1 简介 文件存储:分层次存储,文件存储在文件夹中;访问文件时系统需要知道文件所在的路径。 举例:企业部门之间运用网络存储器(NAS)进行文件共享。 …

把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!

城市化带来的道路拥堵、出行耗时长等交通问题给交管部门带来了巨大的挑战。 ▼ 通过安装在出租车上的GPS设备,可以采集到大量的轨迹数据,从而帮助我们分析人们出行信息,达到优化交通的目的。 最近我们被客户要求撰写关于出租车行驶的研究报…

一次性分清zip、gzip、bzip2、tar命令

文章目录归类zip与unzip命令tar命令使用方式zipunzipgzipgunzipbzip2bunzip2tar归类 我们把这几个命令归类为几种能力,一个是解压缩能力一个是打拆包能力。 我这里打包的意思是不使用压缩算法对文件进行压缩,只是简单的把多个文件归档为一个文件。而拆包…

Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形

Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形 上一篇文章我们绘制了彩色的三角形,接下来其实就应该是让这个三角形旋转起来了,但是,旋转起来之前,还是想通过Qt自己的封装类实现彩色的三角形,并且让他旋转起来。 这才我(冯一川)是写这个系列…

编程之美4 Nim游戏

Tag:贪心;动态规划 题目 N块石头排成一行,每块石头有各自固定的位置。两个玩家依次取石头,每个玩家每次可以取其中任意一块石头,或者相邻的两块石头,石头在游戏过程中不能移位(即编号不会改变…

在ASF中使用On Demand生产DEM等产品时使用不同参考DEM的区别

在ASF中使用On Dmand生产DEM等产品时使用不同参考DEM 主要有两种DEM,分别是SRTM和COP-DEM(GLO-30) 当我们添加Dmand进程之后,点击On Demand Queue 然后进入On Demand界面(如下图所示) 在Processing Op…

MySQL主从复制介绍及实操演示

1. 基本概念 MySQL主从复制的主要效果简单来说是将两个单独的数据库服务器关联起来,对于主机(Master)以及从机(Slave),从机的数据会伴随着主机数据的变化而同步 2. 主从复制作用 可以解决单个MySQL数据库…

leetcode 63. 不同路径 II

文章目录题目思考代码和注释总结题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑…