向开源项目贡献代码那点事

简介: 向开源项目贡献代码那点事

前言



上期在“详解 | 在本地安装使用GitHub上的开源项目”的文章里,我们向大家介绍了如何在本地安装并使用Airtest在Github上面的源码。这期我们来讲一下剩余那部分的内容:“如何上传本地的修改到Airtest仓库上给其他用户使用”,即如何给开源项目贡献代码


需要注意的是,clone操作是不需要项目权限的,只要你注册了GitHub账号,就可以把开源的项目clone下来,就像上期教程我们所演示的那样,可以直接从开源项目那里把项目clone下来。


但是如果你想要贡献代码,即把你本地的代码上传到项目的远程仓库的话,一般都是不能直接传的,因为大部分人都不是项目的开发者,没有直接push代码的权限,所以贡献代码的流程大致如下:


  1. fork原始项目到自己的账号下
  2. 克隆fork到的项目到本地进行修改
  3. 提交修改并同步原始项目仓库的更新
  4. push代码到自己账号的项目仓库里
  5. 向原始项目发起提交申请
  6. 原始项目的管理员同意后,才会merge到原始项目的仓库里


下文是具体的操作方法。


给开源项目贡献代码



fork开源项目到自己的账户上


首先我们需要打开这个开源项目的urlgithub.com/AirtestProj… ;然后点击右上角的Fork按钮。



等待一段时间后,开源项目AirtestProject/Airtest就被复制到我们自己的仓库里面了,命名为你的用户名/Airtest



这个 Fork 后的项目是我们自己账户上的项目,所以我们可以随意修改,且并不会影响到真正的AirtestProject/Airtest项目的。下面我们把它称之为子仓库。原始项目的那个仓库,在下文我们称之为主仓库。


clone子仓库到本地


在本地目录下,右键Git Bush Here,输入以下命令把自己账户上fork得到的仓库(子仓库)clone到本地:


# Clone 到本地的项目目录
git clone https://github.com/your-user-name/Airtest Airtest 
复制代码



切换到某个分支


进入刚才clone好的Airtest目录,右键Git Bush Here,默认进去的是master分支。如果我们是在别的分支上做了改动,比如aaa分支,就可以输入以下命令切换到aaa分支:


# 创建并切换到 aaa 分支
git checkout -b aaa 
复制代码



提交修改到本地仓库


想要提交本地aaa分支上的修改,我们可以使用以下命令将提交修改到本地仓库上:


# 添加修改过的文件
git add 文件名
# 提交commit
git commit -m "改动的描述"
# 可以使用下述命令添加所有文件
git add -A 
复制代码


同步主仓库的更新


提交commit之后,我们并不能马上push代码,还需要同步主仓库上的更新;因为这部分的内容比较复杂,所以我们需要先来理解一些概念:


  1. 在对子仓库修改的过程中,如果主仓库进行了修改更新,子仓库是不知道且不会同步的
  2. 在主仓库进行了修改更新的情况下,如果子仓库没有同步这部分改动而坚持向主仓库发起pull request,很可能会被主仓库的管理员拒绝
  3. origin是用来向子仓库提交更新的远程仓库,Git会默认把origin与你的子仓库关联在一起,可以通过git remote -vv查看
  4. 用来同步主仓库更新的远程仓库,则需要我们手动进行添加,可以将其命名为upstream或是其它你喜欢的名字,还可以通过git remote -v查看仓库之间的关联


了解了上述的概念之后,我们假设已经手动添加了upstream,并且upstream已经更新了很多提交,我们就可以用以下的方式拉取并合并upstream上的更新:


# ①切换到 master 分支
git checkout master 
# ②使用 rebase 模式拉取 upstream/master 上的更新,然后与本地的master合并
git pull --rebase upstream master:master
# ③切换到 aaa 分支
git checkout aaa 
# ④使用 rebase 模式合并本地的 aaa 和 master 分支
git rebase master 
复制代码


或者我们还可以使用下面这种方式拉取合并upstream的更新:


# ①切换到 master 分支
git checkout master 
# ②获取 upstream 上的 master 分支
git fetch upstream master 
# ③切换到 aaa 分支
git checkout aaa  
# ④使用 rebase 模式合并本地的 aaa 和 upstream/master 分支
git rebase upstream/master 
复制代码


将修改的代码push到子仓库上


完成了上述的更新合并以后,我们才可以把代码push到子仓库上:


# 将本地 aaa 分支的代码 push 到 origin 的 aaa 分支
git push origin aaa 
复制代码


向主仓库发起pull request


push代码以后,会跳出GitHub网站的登录弹窗,登陆后会智能识别并弹出按钮 Compare & pull request,点击后填写一些信息即可向主仓库发起pull request


需要注意的是,主仓库的开发人员收到你的申请以后,他们还会对你的改动进行审核(即像上一篇推文讲述的那样,把你的代码拉取到本地测试一下),只有审核通过才会真正被merge到主仓库上。


举个例子,在我们Airtest项目下,有一个项目支持设备列表的文档 github.com/AirtestProj… ,但是因为设备很多,我们更新不过来,所以有一些热心的用户,就会在自己本地fork的项目上面修改了这个platforms.md文档,然后再向我们发起一个pull request



项目的管理员收到这个pull request之后,就会查看用户修改了什么地方:



如果这个用户的pull request没有问题,Airtest的项目管理员就会 merge 这个pull request到主仓库上。至此,该用户就可以成为github上面3k star项目的contributor啦!

相关文章
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
235 0
|
机器学习/深度学习 人工智能 C语言
|
SQL Java 数据库连接
Mybatis快速入门并实现CRUD操作
Mybatis快速入门并实现CRUD操作
223 0
【18. 模拟栈和队列】
模拟栈 **特点**:栈是先进后出。 模拟队列 **特点**:先进先出。
118 0
【18. 模拟栈和队列】
|
8天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
7天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
346 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
19天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1331 8
|
7天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
333 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)