PR 可让你在 GitHub 上向他人告知你已经推送到存储库中分支的更改。 在 PR 打开后,你可以与协作者讨论并审查潜在更改,在更改合并到基本分支之前添加跟进提交。

为什么 PR

使用 PR 的主要原因是促进有益的代码审查过程。如果允许团队中的每个人都在不收集反馈和确保质量的情况下编辑代码,则项目很快就会变得一团糟并存在许多问题。代码审查被证明有助于将项目的标准保持在更高的水平,并减少合并到项目中的问题数量。

代码审查

  • 代码

在合并更改之前检查更改的过程称为 代码检查。建议的更改可以像修复一个小的拼写错误一样简单,也可以像向项目添加数百个具有重大更改的文件一样复杂。当发起拉取请求时,项目的维护者能够查看建议的更改,提出编辑建议,并批准要合并的建议更改。

  • 审查人

拉取请求的作者是对所提议的项目进行更改的一个或多个人。审稿人通常是与作者的队友或合作者,负责审校建议的更改。有许多方法可以决定谁应该查看因项目而异的更改。一些较大的项目有有限数量的“维护者”,他们是一组定义的审阅者,允许批准将更改合并到项目中。其他项目允许除作者以外的任何人批准要合并的更改。

PR 实录

选取的项目是博客园主题 Blogure

如果希望为项目做贡献, 首先要检查目前项目中有那些悬而未决的问题, 有哪些希望新人参与. 主要的渠道就是 issues.

issues

want helped 表示是一个需要大家帮助的 issue, 点进入可以看到具体的项目描述, 如果有兴趣就可以将 Assignees 选择自己.

如果你有其他好的想法, 也可以通过 New issue, 发起讨论.

回到当前 issue, 尝试去理解下需求内容, 如果描述不够清楚, 可以在评论区讨论. 这个需求说了, 原来主题切换到暗黑模式后, 如果此时刷新, 就会失效, 希望将状态存入到 localStorage 中, 以便用户下次可以保存暗黑模式.

把项目 fork 到自己的仓库中, 就可以开始这次旅程了.

coding

通过描述, 完成了下面的代码, 通过 diff 来看到这次代码的变化.

$ git diff page_begin/footer.html
diff --git a/page_begin/footer.html b/page_begin/footer.html
index d31e799..9043f31 100644
--- a/page_begin/footer.html
+++ b/page_begin/footer.html
@@ -4,7 +4,7 @@
<a href="https://github.com/xnuc/cnblogs-theme-blogure">source</a></small>
<label for="switch">
<input type="checkbox" style="position:fixed;bottom:var(--spacing);left:var(--spacing);" id="dark-switch"
- role="switch" @click="darkSwitcher($el)">
+ role="switch" @click="darkSwitcher($el)" :checked="localStorage.getItem('data-theme') === 'dark' ?? false">
</label>
<template v-if="vm.main.layout === 'post'">
<label for="switch">
@@ -23,12 +23,20 @@
$template: '#blogure-footer',
}
}
-
+
function darkSwitcher(dom) {
+ darkSwitcherWithStorage(dom)
if (dom.checked) document.querySelector('html').setAttribute('data-theme', 'dark')
if (!dom.checked) document.querySelector('html').setAttribute('data-theme', 'light')
} + function darkSwitcherWithStorage(dom) {
+ if (!window.localStorage) return
+ if (dom.checked) localStorage.setItem('data-theme', 'dark')
+ if (!dom.checked) localStorage.setItem('data-theme', 'light')
+ }
+ if (window.localStorage) document.querySelector('html').setAttribute('data-theme', localStorage.getItem('data-theme'))
+
function tocSwitcher(dom) {
if (dom.checked) {
document.querySelector('#toc').style.transform = 'translate(0)'

确认无误后, 可以提交到自己的仓库, 如果有提交规范, 注意提交规范.

git add .
git commit -m "feat: 暗黑模式存入localStorage #40"
git push

PR

提交后, 在 fork 仓库可以发起提交了.

有的项目会有严格的分支保护, 这个项目提示必须通过至少一个项目成员的代码审查. 右侧可以添加代码审查人, 等待审查结果.

审查过程中, 可能会有成员提出指导性建议. 如果你认为合理, 可以修改. 或者不合理, 在他的建议下面继续讨论.

merge

检查通过后, 可以 merge 到 master.

重新回到 issue 区, 将提交绑定到这次 issue 上, 关闭这个 issue.

看到 Closed, 这次简单的 PR 就完成了.

为开源提 PR的更多相关文章

  1. 记录第一次给开源项目提 PR

    本文是深入浅出 ahooks 源码系列文章的第八篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇文章算是该系列的一个彩蛋篇,记录一下第一次给开源项目提 PR ...

  2. 怎么给开源项目提PR?

    1. fork 你要的项目 2. 下载到本地 相关步骤如下 在你需要的文件夹下面,右键 git bash 命令,打开 git 命令框 执行如下指令可将项目代码下载到当前目录 ~~~ git clone ...

  3. 如何参与开源项目 - 细说 GitHub 上的 PR 全过程

    目录 一.概述 二.为什么要参与开源项目 三.为什么我想介绍如何 PR 四.我想参与开源项目,怎么开始? 4.1.寻找一个合适的开源项目 4.2.寻找贡献点 五.我要提交 PR,怎么上手? 5.1.第 ...

  4. 给ShardingSphere提了个PR,不知道是不是嫌弃我

    说来惭愧,干了 10 来年程序员,还没有给开源做过任何贡献,以前只知道嘎嘎写,出了问题嘎嘎改,从来没想过提个 PR 去修复他,最近碰到个问题,发现挺简单的,就随手提了个 PR 过去. 问题 问题挺简单 ...

  5. fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因

    很开心的宣布 Log Guru 正式开源! Log Guru,是 fir.im 开发团队创造的小轮子,用在 Mac 电脑上的日志获取,Github 地址:FIRHQ/LogGuru. Log Guru ...

  6. 算法工程师想进一步提高竞争力?向TensorFlow开源社区贡献你的代码吧

    算法工程师为什么也要向社区贡献代码? [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] “做算法的人要熟悉算法框架源码吗?算法工程师难 ...

  7. 记一次Apache Carbondata PR的经历

     前言 前段时间有幸接触到Apache Carbondata,试用过程中发现了一个小小的问题,并且又很快的定位到了问题.然后在社区群里反映了下,负责人问愿不愿意提个JIRA,PR,然后我在没有任何开源 ...

  8. PouchContainer 开源版本及内部版本一致性实践

    PouchContainer 开源版本及内部版本一致性实践 为什么要做内外版本一致 对外开源是提升影响力.共建生态的有力手段.在项目对外开源的过程中,首先是将可以开源的部分抽离出来,发布一个“开源版本 ...

  9. 微服务开源生态报告 No.7

    「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...

随机推荐

  1. Linux编辑shell脚本快速启动jar包

    1.上传jar包到服务器 2.创建并编辑start.sh文件 vi start.sh 将下面内容复制到文件中 ps -ef|grep xf-demo |grep -v grep |awk '{prin ...

  2. Kafka KRaft模式探索

    1.概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据.其核心组件包含Producer.Broker.Consumer,以及依赖的Zookeeper集群. ...

  3. 数组基础篇(对应C++ Primer plus 4.10)

    概要:数组是由一组同类型的元素组成的集合,在内存上是一片连续的存储空间.C++提供了三种数组的表示方法:普通数组,模板类vector(C++98 新增的标准模板库STL提供该模板类)和模板类array ...

  4. CF989C A Mist of Florescence 题解

    因为 \(1 \leq a,b,c,d \leq 100\) 所以每一个颜色都有属于自己的联通块. 考虑 \(a = b=c=d=1\) 的情况. AAAAAAAAAAAAAAAAAAAAAAAAAA ...

  5. 2022省选前联考 AVL树/平衡树

    题目描述 pks 得到了一棵 \(N\) 个节点,权值为 \(1\sim N\) 的 \(AVL\) 树,他觉得这棵树太大了,于是他想要删掉一些节点使得最后剩下的树恰好有 \(K\) 个节点.如果 p ...

  6. C语言-数据结构-结构体

    一.结构体的定义 数组(Array)是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组 ...

  7. 记录自己NVIDIA GeForce MX250迷之安装cuda+pytorch成功了

    电脑是ubuntu20.4 Pop!_OS 20.04 LTS MX250显卡并没有列在CUDA支持的GPU里 希望文中链接的别人的博客不会消失掉. 安装了英伟达的驱动 参考了这一篇:Ubuntu 安 ...

  8. 【cartographer_ros】六: 发布和订阅路标landmark信息

    上一节介绍了陀螺仪Imu传感数据的订阅和发布. 本节会介绍路标Landmark数据的发布和订阅.Landmark在cartographer中作为定位的修正补充,避免定位丢失. 这里着重解释一下Land ...

  9. jupyter 反向代理配置

    抓了下包,看了一下WS连不上,参考这个,问题解决 location / { proxy_pass http://127.0.0.1:8813/; # JUPYTER_PORT 为 Jupyter 运行 ...

  10. python特殊运算符

    一.逻辑运算符 x = False y = True print(x & y)#仅在布尔中使用 print(x and y)#并且 print(x | y)#仅在布尔中使用 print(x o ...