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. zabbix实时监控mysql业务数据

    1. 安装zabbix agent 下载zabbix:过往的软件包都有:https://sourceforge.mirrorservice.org/z/za/zabbix/ZABBIX%20Lates ...

  2. 抓包整理外篇fiddler————了解工具栏[一]

    前言 抓包本篇还没写完,因为在工作中,发现有人用fiddler 用的还不是很好,所以去介绍一下这个东西,fiddler大体分为10多个章节. 正文 首先了解一下fiddler的抓包原理哈. 可以看到当 ...

  3. ssh-配置及使用

    ssh配置文件 SSH的配置文件在/etc/ssh/目录下     openssh-client安装后,生成的配置文件为ssh_config,主要用于连接其他linux主机时,加载此文件     op ...

  4. web文本划线的极简实现

    开篇 文本划线是目前逐渐流行的一个功能,不管你是小说阅读网站,还是卖教程的的网站,一般都会有记笔记或者评论的功能,传统的做法都是在文章底部加一个评论区,优点是简单,统一,缺点是不方便对文章的某一段或一 ...

  5. NC20806 区区区间间间

    NC20806 区区区间间间 题目 题目描述 给出长度为n的序列a,其中第i个元素为 \(a_i\),定义区间(l,r)的价值为 \(v_{l,r} = max(a_i - a_j | l \leqs ...

  6. 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解

    1.什么是Scrapy-Redis Scrapy-Redis是scrapy框架基于redis的分布式组件,是scrapy的扩展:分布式爬虫将多台主机组合起来,共同完成一个爬取任务,快速高效地提高爬取效 ...

  7. 攻防世界MISC进阶区 61-63

    61.肥宅快乐题 得到swf文件,但是用PotPlayer打不开,用浏览器应该可以打开,打开后可以在npc的对话中看到一段base64 解密后就可以得到flag 62.warmup 得到一张png和一 ...

  8. Ubuntu安装python各版本

    编译安装的话,之前遇到过很多小问题,感觉还是通过添加这个ppa方式装的比较稳,缺点是可能安装的比较慢,可配合proxychain4 sudo apt install software-properti ...

  9. 【Python3】列表字典集合元组

    1 列表 1.1 定义与索引 在Python中,第一个列表元素的下标为 0通过将索引指定为 -1 可以让Python返回最后一个列表元素 inventory = ['sword', 'armor', ...

  10. c++小游戏--五子棋

    大家好,我是芝麻狐! 这是我自制的小游戏,目前仅支持devc++. 如果你没有c++软件, 请打开网站GDB online Debugger | Compiler - Code, Compile, R ...