手把手教你,细说向开源项目递交代码的流程

系列文章目录

手把手教你安装Git,萌新迈向专业的必备一步
GIT命令只会抄却不理解?看完原理才能事半功倍!
常用GIT命令详解,手把手让你登堂入室
GIT实战篇,教你如何使用GIT可视化工具
GIT使用需知,哪些操作会导致本地代码变动


在这里插入图片描述
经过前面的学习,相信大家对GIT的已经基本熟悉了。但是笔者也知道,很多同学对向开源项目做贡献感兴趣,开源项目的魅力在于它们能够吸引来自世界各地的开发者协同工作,共同创造出更为强大的代码库。如果你想为一个开源项目作出贡献,那么递交代码就是必须掌握的技能。在这篇博客中,我将会手把手地教你如何向开源项目递交代码

📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验;爱好广泛,乐于分享,致力于创作更多高质量内容
📗本文收录于 GIT 专栏,有需要者,可直接订阅专栏实时获取更新
📘高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新,欢迎指导
📙Zookeeper Redis kafka docker netty等诸多框架,以及架构与分布式专题即将上线,敬请期待


一、选择开源项目

首先,你需要选择一个你想要为其作出贡献的开源项目。你可以在GitHub等代码托管平台上查找符合你兴趣和能力的项目,了解它们的目的、代码等级、许可证、开发人员和社区等信息。

在选择一个项目之前,你应该首先了解它的需求,并检查它们是否与你的专业技能相符合。你还应该考虑项目的长期规划,以便你的工作能够持续地为项目做贡献。

二、两个操作

我们之前的内容,一般都是开发者自己维护的仓库,拥有着诸多权限,可以让开发者随意更改。但是别人的开源项目,你并不会拥有直接更改的权限。所以在代码平台上提供了两个操作

1. fork

fork的定义是指的是将一个开源项目复制到自己的 GitHub 账户下的操作。当你 fork 一个项目时,你就拥有了该项目在你的 GitHub 账户下的一份完整拷贝,可以在此基础上进行修改、测试和实验等。

如 github上的fork位置:

在这里插入图片描述

或者是 gitee 上的也是一样的:

在这里插入图片描述

如果你前面对Git的学习比较认真的话,比较容易想起来一个类似的命令,即git clone。该命令可以帮助你获取代码库,但它们之间有很大的区别

在这里插入图片描述
简单来说,fork 是把开源仓库的内容复制到你的远程仓库,clone 是把你的远程仓库复制到本地仓库。另外需要说明的是,fork 并不是GIT自带的功能,而是像github、gitee 这样的代码托管平台提供的功能,主要作用是在平台上进行协作

2. pull request

与fork相对的,当我们完成一些内容后,需要把我们的内容推送至开源项目中,但是我们并没有推送的权限,所以有了PR(Pull Request),Pull Request是指在GitHub或GitLab等代码托管平台上,开发者把自己修改后的代码提交给项目的管理者,请求他们审核并合并自己的代码的过程

在这里插入图片描述

我们在托管平台上能看到这些 pull requests,如下:

在这里插入图片描述
在这里插入图片描述

当我们点进去后,能看见其他开发者修改的内容及信息

在这里插入图片描述


三、实操

上面已经讲解了两个基本操作,那么现在我们开始手把手教各位如何实际操作。因为是演示,所以笔者自己在gitee上维护一个项目,然后使用小号来进行模拟操作。

1. fork 并 clone

我们先使用小号打开项目页面,然后点击 fork,目标空间当然是小号自己的空间

在这里插入图片描述
等待一会后,我们就能在小号的空间中,看到复制过来的开源项目

在这里插入图片描述

然后我们进行工程的url复制,并将其clone至本地,这里懒得敲命令,使用的是 GIT实战篇,教你如何使用GIT可视化工具 中安装过的 TortoiseGit 工具

在这里插入图片描述

在这里插入图片描述

2. 修改内容并推送

我们对 README 文件进行修改

在这里插入图片描述

然后我们把修改的内容进行提交和推送

在这里插入图片描述

此时我们可以看到提交已经到了远程上

在这里插入图片描述

3. 创建PR

然后我们就可以点击 PR 了

在这里插入图片描述

因为是fork过来的项目,当我们点击PR的时候,源分支和目标分支gitee会自动帮我们填好,如下图,我们只需要填一下PR的标题和描述。

在这里插入图片描述

一般来讲,PR的标题应该简洁明了地概括你所做的修改,可以使用动词+名词的形式描述你的修改操作,例如 “修复某个bug” 或 “添加某个新功能”。
而PR的描述则是详细说明你的修改内容和目的,包括解决了什么问题、采取了什么处理方式,以及对代码或用户的影响等方面。同时,你还可以在描述区域中提供一些相关链接或截图,以便审核者更好地理解你的修改内容

当我们创建了PR以后,就会看到这个页面,提示我们还在评审状态

在这里插入图片描述

4. 管理者评审

此时,如果我们是开源项目的管理者,当我们打开项目主页面时,就能看到这一次的PR了

在这里插入图片描述

当我们点开这个PR进行查看,就可以看到提交的内容

在这里插入图片描述

管理者可以对此次PR进行代码审核,及多种维度的检测。然后点击上面的 “审查通过” 和 “测试通过”。

5. 合并

在对PR进行检测通过后,管理者就可以进行代码合并了,我们因为是演示,所以并没有产生冲突。

在这里插入图片描述

如果PR出现合并冲突时,一般来说有两种做法,一种是管理员来解决冲突。另外一种就是取消当前PR的合并,并要求提交者重新修改,在这种情况下,管理员应该在PR评论中明确指出冲突并提供建议,以便提交者可以重新修改。

在这里插入图片描述
如果选择合并,那么恭喜你,你已经完成了一次递交,成为了该开源项目的贡献者

四、答疑与总结

本次我们以gitee为平台,详细讲解了向开源项目贡献代码的全流程,github也是一样的操作,当然笔者也总结了目前互联网上的一些疑问,在这里也做一个答疑

  • 为什么叫PR(pull request)

如果用过gitLab的同学,可能对另一个类似的词汇有印象。即merge request,一般就是我在 B 分支开发,开发完成后想把 B 的代码合到 A 分支,但我并没有A分支的权限,就发起这样一个请求。其实PR也是一样的,虽然名称不一样,但实际含义相同。我们发起PR的意思就是,请求管理者拉取我们写的代码,然后合并到他们的项目中,最终合并与否是管理者来决定,我们只是请求。

  • 为什么一定要fork,能不能直接clone开源项目,修改后提交并推送?

你没有权限进行push。另外即使你有权限,作为一个社区,我们应该遵循开源协作的标准流程,包括 fork 该项目、clone 代码到本地、在本地修改并提交到 GitHub,最后通过 Pull Request 向原项目管理者申请合并。这样的流程保证了你的身份和代码的原始性,也方便了其他人对你的修改进行审查和协作。

  • 我想成为开源项目贡献者,我能做些什么?

其实能做的还是挺多的,最直接的就是代码方面的优化、bug的修复。如果你觉得这样太难,也可以选择为项目翻译文档或用户界面,或者编写项目的手册之类的

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

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

相关文章

信息安全:网络安全漏洞防护技术原理与应用.

信息安全:网络安全漏洞防护技术原理与应用. 网络安全漏洞又称为脆弱性,简称漏洞。漏洞一般是致使网络信息系统安全策略相冲突的缺陷,这种缺陷通常称为安全隐患。 安全漏洞的影响主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可…

UE5 虚幻引擎 使用编辑器工具进行资产批处理操作 让你的工作效率指数级增长!!!

目录 0 引言1 编辑器工具蓝图1.1 介绍1.2 案例:批量设置静态网格体资产的LOD1.3 进阶用法 2 编辑器工具控件2.1 介绍2.2 案例:随机给场景中Actor添加Yaw旋转值 0 引言 官方教程视频 参考文章 参考视频 UE5提供了两种 编辑器工具 :编辑器工具…

【计算机网络】IP协议

目录 前言 IP协议 基本概念 IP协议格式 分片 16位标识 3位标志与13位片偏移 分片流程 网段划分 网络号和主机号 DHCP协议 CIDR划分方案 特殊的ip地址 ip地址数量限制 私有ip地址与公网ip地址 路由转发 前言 我们前面讲了HTTP/HTTPS协议和TCP/…

HTML5福利篇--使用Canvas画图

目录 一.Canvas元素 1.Canvas元素定义 2.使用JavaScript获取页面中的Canvas对象 二.绘制图形 1.绘制直线 2.绘制矩形 (1)rect() (2)strokeRect() (3)fillRect()和clearRect()函数 3.绘制圆弧 4.…

位图布隆过滤器

文章目录 位图&布隆过滤器1. 位图1.1位图概念1.2位图原理1.3位图实现1.4位图排序 2. 布隆过滤器2.1 引入布隆过滤器2.2 概念2.3 布隆过滤器插入2.4 布隆过滤器的查找2.5 布隆过滤器模拟实现2.6 布隆过滤器的删除2.7 布隆过滤器优缺点2.8 布隆过滤器使用场景 3. 海量数据问题…

比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

在我们的零知识赏金 (ZKB) 系列的第二部分中,我们将其应用于解决哈希冲突难题。在这样的谜题中,两个不同的输入散列到相同的输出。此类赏金可用于: 充当煤矿中的金丝雀,给我们一个有价值的提醒。存在冲突是散列函数较弱的标志&…

合合信息、上海大学、华南理工大学发布业内首个古彝文编码“大字典” ,为古文字打造“身份证”

“乌蒙山连着山外山,月光洒向了响水滩。”近期在各大短视频平台爆火的《奢香夫人》你听过吗?奢香夫人是一位彝族“巾帼英雄”,这首同名歌曲早在2009年便已发布,如今突然“翻红”,不仅体现了大众对于少数民族文化高涨的…

Unity可视化Shader工具ASE介绍——1、ASE的介绍、安装和简单使用

大家好,我是阿赵,接下来我打算介绍一下Unity引擎的一个好用的可视化Shader编辑插件。这个插件叫做Amplify Shader Editor,下面都会简称为ASE。这一篇主要是讲一下这个插件的获取、安装,和一些简单的界面用法介绍。之后有机会&…

C语言的stdio.h的介绍

C语言的stdio.h的介绍 C语言的stdio.h的介绍 C语言的stdio.h的介绍C语言stdio.h的介绍 C语言stdio.h的介绍 这个含义是导入标准输入输出库 包含头文件.h&#xff0c;std标准库&#xff0c;io是input output输入输出库 <>代表系统库&#xff0c;自定义的话用""…

C++打印字符串数组中的元素(字符串)

C遍历字符串数组&#xff0c;在main函数里定义一个字符串数组&#xff0c;要求依次输出字符串元素&#xff1a; string a[4] {"a", "vag", "gwe", "gewa"};希望打印的结果 上面可以看做是二维指针&#xff0c;第一维是每个字符串&a…

Springboot 前后端分离项目使用 POI 生成并导出 Excel

在做一个 SpringBoot 前后端分离项目的时候&#xff0c;需要将数据存到 Excel中&#xff0c;用户可以下载 Excel。具体实现是采用 Apache 强大的 POI。文章最后将源码例出。 POI API 文档&#xff1a; https://poi.apache.org/apidocs/dev/index.html 步骤 导入 POI 的 maven …

【C语言】指针的进阶(三)—— 模拟实现qsort函数以及指针和数组的笔试题解析

目录 1、模拟实现qsort函数 1.1、qsort函数的回顾 1.2、模拟实现qsort函数 2、指针和数组笔试题解析 2.1、一维数组 2.2、字符数组 1、模拟实现qsort函数 1.1、qsort函数的回顾 要模拟实现qsort函数&#xff0c;就要了解清楚qsort函数的参数以及使用方式。 我们先回顾一…

vue3 - 封装倒计时函数 useCountDown

编写一个函数 useCountDown 可以把秒数格式化为倒计时的显示状态。 步骤 1. 编写函数框架 ---> 确认参数和返回值&#xff08;显示格式化时间的数据开启倒计时的函数&#xff09; 2. 倒计时的核心逻辑&#xff1a;每隔1s减一 3. 格式化 1&#xff09;安装格式化工具&#xf…

跨域问题的原理及解决方法

一.同源策略 如果没有进行特殊处理&#xff0c;我们在进行前后端联调的时候游览器会发生报错&#xff1a; 这是因为请求被同源策略被阻止&#xff0c;浏览器出于安全的考虑&#xff0c;使用XMLHttpRequest对象发起HTTP请求&#xff08;异步请求&#xff09;时必须遵守同源策略…

单文件制作工具 v7.0.2.38(20230406) 最新版_一个小巧强大的PECMD/7zSFX单文件制作工具

网盘下载 功能描述 —全新的自解压内核&#xff0c;非现有的7zSFX、WinRAR、ZLIB自解压模块&#xff1b; —采用先进的打包方式&#xff08;堪称黑科技—>内核默认PECMD自解压模块&#xff09; —7zSFX模块&#xff0c;创建的单文件支持传递参数&#xff08;包含内置参数和外…

1、MQ基础

微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后&#xff0c;才能继续执行后面的业务。也就是说调用者在调用过程中处于…

信息安全:网络安全审计技术原理与应用.

信息安全&#xff1a;网络安全审计技术原理与应用. 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在千建立“事后“安全保障措施&#xff0c;保存网络安全事件及行为信息&#xff0c;为网络安全事件分析提供线…

SQLite 3.43 发布,性能大提升!

前言 SQLite是一种被广泛运用的嵌入式关系型数据库管理系统&#xff0c;最新发布的SQLite 3.43版本带来了一个重要的改进&#xff0c;大幅提升了对JSON数据的处理性能&#xff0c;达到了之前的两倍。 主要更新 添加对 Contentless-Delete FTS5 索引的支持。这是 FTS5 全文搜索…

leetcode算法题-移动零Java

这道题的解法,我们可以新建一个等长的数组,初始化后数组中的元素都为零,我们只需要遍历一遍原来的数组,将不为0的数据转移到新数组即可,下面是代码实现: public static void main(String[] args) {System.out.println("移动零:" Arrays.toString(moveZero(new int[…

【STM32】读写内部Flash初步使用

基于stm32f103&#xff0c;作为个人学习记录使用 STM32 芯片内部有一个 FLASH 存储器&#xff0c;它主要用于存储代码,在紧急状态下常常会使用内部 FLASH 存储关键记录&#xff1b; 内部 FLASH 的构成 STM32 的内部 FLASH 包含主存储器、系统存储器以及选项字节区域 大容量…