对github项目提PR 请求的保姆级教程——以修改casdoor项目的swagger文档为例,干货满满

news2024/11/22 21:47:55

Github入门教程可以在腾讯犀牛鸟开源人才培养计划里面学习。

PR简介

PR(Pull Request) 即拉取请求,是 GitHub 上进行协同开发的一种非常常用的方式。
它的基本流程是:

  1. 开发者fork一个开源项目的代码库,将其克隆到本地。
  2. 在本地对代码进行修改、添加新功能等。
  3. 将本地修改后的代码push到开发者自己的代码库中。
  4. 在开源项目的代码库中,发起一个pull request,请求项目维护者将开发者的代码merge到项目主代码库中。
  5. 项目维护者review代码,如果没有问题则approve并merge该PR。
  6. 开发者的代码就正式成为了该开源项目的一部分。

fork 与clone

接下来按照步骤,逐步进行。
把casdoor的github代码fork到自己的仓库里,通过这种方法,开发者可以在fork后的代码库中进行修改、新增功能,然后通过pull request将代码贡献回原项目。

在这里插入图片描述

通过fork,你的仓库里就会多一个项目。

在这里插入图片描述

怎样对fork后的代码库进行修改呢?当然得将代码克隆到本地噻!右键点击空白处——你想保存该项目的路径下,用git打开:

在这里插入图片描述

然后克隆你的代码库到本地,在git上输入:

git clone https://github.com/此处应该是你的github用户名/casdoor.git

在这里插入图片描述

此时你会发现该路径下多了一个文件夹,名为casdoor,克隆成功。

修改本地swagger文件(含bee的使用)

如何修改casdoor的swagger文件呢?简单来说就是修改注释代码然后用casbin魔改的bee工具生成swagg.json文件。我们知道,beego框架为生成交换文件提供支持,以便通过称为“bee”的命令行工具清除api。 Casdoor也以beego为基础。 但我们发现bee生成的swagger文件未能将api分类为“@Tag”标签, 我们修改了原bee以执行功能。那么如何写注释呢?

大多数规则与原bee comment格式完全相同, 唯一的差异是api必须按照"@Tag"标签分成不同的组别, 因此,开发者有义务确保正确添加此标签。 下面是一个示例:

// GetLdap
// @Title GetLdap
// @Tag Account API
// @Description get ldap
// @Param	id	query	string	true	"id"
// @Success 200 {object} object.Ldap The Response object
// @router /get-ldap [get]
func (c *ApiController) GetLdap() {
	id := c.Input().Get("id")

	if util.IsStringsEmpty(id) {
		c.ResponseError(c.T("general:Missing parameter"))
		return
	}

	_, name := util.GetOwnerAndNameFromId(id)
	c.ResponseOk(object.GetMaskedLdap(object.GetLdap(name)))
}

具有相同"@Tag"标签的 api 将会被放入同一个组。

我们可以把注释分类:

@Title

接口的标题,用来标示唯一性,唯一,可选

格式:之后跟一个描述字符串

@Description

接口的作用,用来描述接口的用途,唯一,可选

格式:之后跟一个描述字符串

@Param

请求的参数,用来描述接受的参数,多个,可选

格式:变量名 传输类型 类型 是否必须 描述

变量名:字符串

传输类型:path or body or query or form or header

  • query 表示带在url串里面?aa=bb&cc=dd

  • form 表示使用表单递交数据

  • path 表示URL串中得字符,例如/user/{uid} 那么uid就是一个path类型的参数

  • body 表示使用raw body进行数据的传输

  • header 表示通过header进行数据的传输
    类型:

  • string

  • int

  • int64

  • 对象,这个地方大家写的时候需要注意,需要是相对于当前项目的路径.对象,例如models.Object表示models目录下的Object对象,这样bee在生成文档的时候会去扫描改对象并显示给用户改对象。
    是否必须:true 或者false

描述:字符串

@Success

成功返回的code和对象或者信息

格式:code 对象类型 信息或者对象路径

code:表示HTTP的标准status code,200 201等

对象类型:{object}表示对象,其他默认都认为是字符类型,会显示第三个参数给用户,如果是{object}类型,那么就会去扫描改对象,并显示给用户

对象路径和上面Param中得对象类型一样,使用路径.对象的方式来描述

@Failure

错误返回的信息,

格式: code 信息

code:同上Success

错误信息:字符串描述信息

@router

上面已经描述过支持两个参数,第一个是路由,第二个表示支持的HTTP方法。

注释写完后,就要用casbin提供的bee工具生成swagger文档。以下是casdoor官方文档提供的解决办法:

  1. 以正确的格式写入 api

  2. 获取资源库 https://github.com/casbin/bee

  3. build the modified bee, for example, in the root directory of casbin/bee, run

go build -o mybee .
  1. copy mybee to the base directory of casdoor

  2. in that directory, run

mybee generate docs
  1. 之后你会发现生成新的swagger文件。

以下是对以上步骤的理解与使用:

注释写完后先去https://github.com/casbin/bee获取bee工具,具体过程是将该仓库的代码克隆到本地(你也可以先fork,再克隆,因为不需要修改这个仓库的代码,所以可以不用fork)
在你想保存该bee工具代码的路径处用git bash打开,输入命令:

git clone https://github.com/casbin/bee.git

然后进入该项目目录,也就是bee目录,输入命令:

go build -o bee.exe

使用该命令,可以在该项目目录下生成bee.exe文件,接下来为了使用它,将它复制一份存放在 $GOPATH/bin 里面,当然你需要把$GOPATH/bin 添加到你的环境变量中,我是将$GOPATH/bin 添加到用户变量的 path中:

在这里插入图片描述

至于为什么将bee.exe放在$GOPATH/bin 里面,这似乎是一种规范。配好环境变量后,打开casdoor的项目目录,在终端输入命令:

bee generate docs

你会发现,项目中swagger目录里的swagger.json文件和swagger.yml文件均已更新,检查后确认casdoor的swagger文件修改成功。

更新github仓库

由于本地的casdoor项目有文件修改,比如上述的swagger.json文件和swagger.yml文件,接下来就要将他们提交到你的github仓库中。首先输入git status查看本地仓库与远程仓库的文件差异,再输入git add -a将工作目录中的文件添加到暂存区(staging area),我输入的是 git add swagger,表示只添加swagger这个目录。

在这里插入图片描述

然后输入git commit -m "对这次提交的描述",最后使用git push origin matser将本地的master分支推送到origin远程仓库的master分支。

在这里插入图片描述

但是经常会出现这个报错:fatal: unable to access 'https://github.com/uestc-wxy/casdoor.git/': Failed to connect to github.com port 443 after 21065 ms: Couldn't connect to server,或者其他类似于连接的错误,这就需要你在git输入:

git config --global --unset http.proxy 
git config --global --unset https.proxy

这个bug我已经习以为常了,接下来重新push你的master分支就行了。(万一还是不行,试试换换网络啥的,我当时换成热点突然就push成功了,难绷)

提PR

这时你的github仓库已经更新完成了,下一步就是提PR,打开你要提PR的官方仓库(注意不是你自己fork后的仓库哈),点击pull requests

在这里插入图片描述

再点击New pull request

在这里插入图片描述

然后github会自动比较你的仓库和这个官方仓库代码的差异,符合要求后,可以点击Create pull request

在这里插入图片描述

其实我是通过如下方式提交PR的

fork的仓库代码被修改过后github会出现类似的语句:

在这里插入图片描述

点击就能直接进入提PR的界面,符合要求后,就可以点击Create pull request

在这里插入图片描述

你提的PR需要标题,你也可以做评论。标题一定要符合规范,否则PR将不予通过。即标题要以属性开头,后面跟上简要描述。

feat: 新功能(feature)
fix: 修补bug
docs: 文档(documentation)
style: 格式(不影响代码运行的变动)
refactor: 重构(即不是新增功能,也不是修改bug的代码变动)
chore: 构建过程或辅助工具的变动
revert: 撤销,版本回退
perf: 性能优化
test:测试
improvement: 改进
build: 打包
ci: 持续集成

比如fix: provide detailed description of ldap in swagger

另外还需要签订CLA协议,提交PR之后你会收到相关邮件,同意该协议即可。

至此,第一次提PR之旅纠结束了,感慨颇多,磕磕绊绊,到处查阅资料,最终也算圆满完成了。

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

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

相关文章

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程

详情点击链接:基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平 一,空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软件快…

MySQL数据库(七)

目录 一、联合查询 1.1内连接 1.2外连接 1.3自连接 1.4子查询 1.5合并查询 一、联合查询 实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积: 下面进行多表查询的练习,对应的在表的设计与数据插入中…

练习时长两年半的网络安全防御“first”

1.网络安全常识及术语 下边基于这次攻击演示我们介绍一下网络安全的一些常识和术语。 资产 任何对组织业务具有价值的信息资产,包括计算机硬件、通信设施、 IT 环境、数据库、软件、文档资料、信息服务和人员等。 网络安全 网络安全是指网络系统的硬件、软件及…

Stable Diffusion - 扩展 Roop 换脸 (Face Swapping) 插件的配置与使用

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131856141 官网:GitHub - roop,参考论文:RobustSwap: A Simple yet Robust Face Swapping Model against Attr…

kubesphere部署谷粒商城, nginx无法路由到网关服务

使用kubesphere部署谷粒商城,微服务和nginx均已部署成功,其中ingress-controller已安装。但是nginx无法路由到网关服务。使用域名gulimall.com访问谷粒商城,默认访问的是nginx首页,路由失败。 校对nginx的配置信息,上游…

MySQL数据库第十课-------join连接的再续------强强连锁

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com __________________________________________________________ 目录 join连接 内连接 左连接 右连接 外连接 其他连接 ______________________________________________________________ 作…

Unity 实用插件篇 | Tutorial Master 2 游戏引导教程 快速上手

前言【Unity 实用插件篇】 | Tutorial Master 2 游戏引导教程 快速上手一、Tutorial Master 2 介绍1.1 基本概念1.2 相关链接1.3 效果展示二、搭建简易测试环境三、制作简易引导教程3.1 挂载一个Tutorial Master Manager脚本3.2 设置引导预制体3.3 创建一个引导教程3.4 添加引导…

SpringBoot系列--【如何集成prometheus?】

如何集成prometheus? 1.添加pom依赖 注意:prometheus的版本依赖springboot版本,示例使用的springboot版本的2.3.X. 2.配置文件添加配置 3.主启动类添加如下配置 4.验证端点 SpringBoot项目到这里就配置完成了,启动项目&#xff0c…

将请求参数数据推送至RabbitMQ队列中并且捕捉消息没有到达交换机的异常

1:自定义mq信息类(我的交换这些信息都从nacos上直接取的,怎么从nacos取配置信息看上篇文章): import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;impo…

Windows10 + Mingw + Paho Mqtt C/C++编译使用

文章目录 1、前言2、按照Mingw环境3、编译paho c3.1、ssl验证大坑3.2、解决方法3.3、mingw32-make过程出现报错3.4、继续出错3.5、编译成功 4、编译paho c5、Qt使用paho mqtt库5.1、编码 1、前言 起初使用的是Cmake Visual Studio 2019进行编译,使用的时候出现ssl错…

《Java核心技术大会2023》——AIC松鼠活动第一期

共同深入探讨 Java 生态!直播预约:视频号“IT阅读排行榜” 大会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近…

【搜索引擎Solr】配置 Solr 以获得最佳性能

Apache Solr 是广泛使用的搜索引擎。有几个著名的平台使用 Solr;Netflix 和 Instagram 是其中的一些名称。我们在 tajawal 的应用程序中一直使用 Solr 和 ElasticSearch。在这篇文章中,我将为您提供一些关于如何编写优化的 Schema 文件的技巧。我们不会讨…

基于linux下的高并发服务器开发(第二章)- 2.14 管道的读写特点和管道设置为非阻塞

管道的读写特点: 使用管道时,需要注意以下几种特殊的情况(假设都是阻塞I/O操作) 1.所有的指向管道写端的文件描述符都关闭了(管道写端引用计数为0),有进程从管道的读端读数据,那么管…

SpringBoot系列--【K8s中的SpringBoot如何给应用配置健康检查?】

K8s中的SpringBoot如何给应用配置健康检查? 1.健康检查的必要性 作为业务监控的首要目标,服务的存活性,也就是它的健康状况,成为了重中之重,容器云平台可以根据健康检查策略来对服务实例进行自动重启或从负载均衡中摘除…

IP-GUARD如何在客户端上进行审批管理?

如何在客户端上进行审批管理? 4 实现步骤如下: 1、先在控制台-加密-加密授权设置-常规中,勾选允许登录审批管理平台开启客户端登录审批管理平台的功能。 2、然后客户端电脑,右键加密托盘登录审批账号后即可正常审批。 如何实现特…

MySQL 8.1.0正式发布!

早在五年前,MySQL 8.0 就发布了第一个 GA 版本,此后一直在这个版本进行更新,而没有升级大版本。最近 MySQL 官方终于发布了 MySQL 8.1.0 和 MySQL 8.0.34,分别代表了创新版和长期支持版。 新版本中与 SQL 相关的改进包括保存执行计…

用C++在Windows桌面上打个叉❌

我们的目标是,只写一二十行代码,用 Windows自带的原生接口,强行在桌面上打个大红❌,如图: 写了大半年C,天天和“黑乎乎” 的小窗口你侬我侬?赶紧来打开一扇“Windows”,从窗口跳进全…

数据库系统课程笔记

初步认识数据库系统 schema 英 /ˈskiːmə/ 美 /ˈskiːmə/ n.(计划或理论的)提要,纲要 关系模型之基本概念 关系和表的差别 关系的特性 什么是sql 创建数据库(编写脚本) 创建表格语法(编写脚本) 修改表的结构语法 …

微服务Day4——Docker

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会…

如何生成一个随机数?

文章目录 虚假的随机数真正的随机数生成规定位数的随机数 虚假的随机数 说到如何生成一个随机数,可能当你百度后会看到这样一段代码。 srand((unsigned int)time(NULL)); int ret rand();那么一个随机数到底是如何生成的呢?我相信善于探索的你一定想知…