Git相关:Gitee的PR显示权限形同虚设?

Git相关:Gitee的PR显示权限形同虚设?

Pull Request介绍

当我们参与开源项目或者是任意一个其他的项目的时候,我们是无法直接对其他人的Git远程仓库进行修改的,一般需要经过以下几个步骤:

  1. fork别人的原仓库,也就是拷贝一份跟别人一模一样的内容到自己的远程仓库里。
  2. 从自己的远程仓库clone到本地,在本地完成修改后push自己的远程仓库当中。
  3. 别人的原仓库提交Pull Request,请求将自己新增的部分合并到别人的仓库中。
  4. 原仓库的所有者测试你提交的Pull Request,同意合并。

简单来讲,就是我们告诉原仓库的所有者,我们对你的仓库的内容进行了部分的新增或者更改,你将新的内容合并过去吧!

Gitee的PR显示权限

一般情况下开发者提交 PR 时,如果是公开项目那么这个 PR 是对所有人都可见的,如果是私有项目,PR 对项目组成员都可见。这样无法避免学生在提交作业或者代码比赛时相互借鉴的情况。

为了方便老师使用收集作业或者进行代码考试、比赛,码云平台新增功能 —— Pull Request 显示权限设置。

启用方式:[项目主页] -> 管理 -> 基本设置 -> 开启的 Pull Requests 显示权限。如下图所示:

在这里插入图片描述

一旦启用该设置,那么开发者提交的 PR 只有管理员、审查者以及测试者可见,其他开发者不可见。此功能主要用于高校版中,敦促学生独立完成作业。

拉取Gitee的PR内容到本地仓库

我们首先查看一个未设置PR权限的仓库的PR内容,

在这里插入图片描述

点开任意一个PR,可以通过右上角的克隆按钮,查看到拉取到本地的命令:

在这里插入图片描述

这个命令为:

git fetch https://gitee.com/<username>/public.git pull/4/head:pr_4

构建拉取其他PR内容的命令

当你使用一个没有权限的账号去查看PR内容的时候,会发现被403了,无法查看内容,也就无法获取克隆命令了:

在这里插入图片描述

但是,观察之前的命令我们会发现,命令中的"4"是我们的提交序号,也就是说,我们只需要将4替换成其他的序号,就可以构建出拉取其他PR内容的命令了。

我们通过观察PR列表页面的内容,可以从中获取到所有PR的序号,如下图所示:

在这里插入图片描述

我们在这个序号处右击,弹出浏览器菜单,选择"检查",可以看到html内容:

在这里插入图片描述

我们关注它的某一级父标签含有git-pull-requestsid属性,它自身是在一个span标签当中,我们通过CSS选择器的语法#git-pull-requests>div>div>span,可以找出这个标签。

由于一共有三类PR:开启的已合并已关闭,所以我们需要过滤已合并已关闭的PR。

通过查看html内容可以看出:

在这里插入图片描述

另外两类PR的class属性里分别含有closedmerged,我们可以通过这个将其过滤掉。

GO语言实现

由于最近转型到GO语言了,因此决定用GO语言来实现一下这个自动化拉取所有PR内容的小工具。

解析html内容的包选择了"github.com/PuerkitoBio/goquery"

核心代码:

// url里放的是远程仓库的地址,如:https://gitee.com/<username>/repository
resp, _ := http.Get(url + "/pulls?page=")
defer resp.Body.Close()

// 使用GoQuery库来解析PR列表的html页面
doc, _ := goquery.NewDocumentFromReader(resp.Body)

// 第一个判断以"!"开头的字符串,用于定位当前提交的序号
// 第二个判断过滤掉已关闭的PR
// 第三个判断过滤掉已合并的PR
// 最后构建拉取命令,并执行
doc.Find("#git-pull-requests>div>div>span").Each(func(i int, selection *goquery.Selection) {
   
    if strings
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值