先决条件:提出你的第一个开源拉取请求 | GitHub
如果你刚接触开源并想为它做出贡献,你一定已经阅读了数十篇关于初学者如何开始使用开源的不同文章,但你仍然没有对任何开源组织做出任何贡献,你仍然就像您第一次开始阅读此类文章时一样被它吓倒。
如果您可以与上面提到的任何内容相关联,那么您应该阅读这篇文章。
为什么你应该阅读这篇文章?
在我开始之前,我想告诉你,我以前也处于同样的情况,这篇文章不会成为那些通用文章之一。
这篇文章特别是关于一个名为 DuckDuckHack 的组织,在我看来,它最适合初学者开始,希望在完成本文后的几个小时内,您将记录并提交您的第一个 Pull Request。
组织
DuckDuckHack 是一个致力于开发 DuckDuckGo 的开源社区。 DuckDuckGo 是一个互联网搜索引擎,强调保护搜索者的隐私并避免个性化搜索结果的过滤气泡。它不会对其用户进行概要分析,而是针对给定的搜索字符串向所有用户显示相同的搜索结果,而不是为每个用户创建个性化的搜索结果。重点是返回最佳搜索结果。
使命
DuckDuckHack 社区的使命是使 DuckDuckGo 成为最好的搜索引擎,社区需要帮助。帮助可以采用即时答案(或 IA)的形式。例如,一个 GCD 计算器,用户输入 2 个数字和字符串“gcd”,而不是去另一个网站寻找答案,他们就在 DuckDuckGo 上得到答案。
投资顾问的类型:
根据 DuckDuckHack Docs,有四种类型的 IA
- 好东西
- 香料
- 黑头
- 长尾巴
我们将专注于好东西 IA,因为其余的都是基于 API 的,可能不适合初学者。最简单的好东西是备忘单。例如,你想要一个快速的 c++ 参考,那么你所要做的就是去 DuckDuckGo 并输入以下“c++ 备忘单”并搜索。它将如下所示。
备忘单可以是任何内容,从电影和视频游戏秘籍到 Linux 发行版备忘单,您只需要一个想法,其余的都很简单。
入门
本节是在假设您熟悉 git 和 github 的情况下编写的,如果不熟悉,那么您可能应该查看此链接。
设置开发环境:
- 转到 GitHub 并 forkduckduckgo/zeroclickinfo-goodies。这是包含好东西 IA 的主要存储库,其中还包括备忘单
- 现在你在你的 github 配置文件上有一个他们的存储库的副本,这个分支将是你的源,而你已经分支的主存储库将是你的上游(这些术语将在后面解释)
- 我们将使用名为 codio 的在线开发环境,而不是将此存储库克隆到您的计算机上
- 在 codio 上注册或仅使用您的 github 帐户注册
- 加入 DuckDuckGo 组织。 Codio 对 DuckDuckHack 社区成员免费。
- 现在转到此链接,通过单击项目选项卡并选择 fork 选项,在您的 codio 配置文件中创建项目。
- 现在会出现一个弹出窗口,选择“Box & Project”选项。
- 现在,首先转到 codio 项目页面并选择“DuckDuckGo”项目,将您的 github fork(来源)克隆到您的 codio 上
- 现在打开工具->终端类型
git clone .git (your github URL is your fork on github)
- 输入您的 github 凭据并按 Enter
现在您将拥有 github fork 的文件树,您可以查看所有文件。现在我们将进入贡献部分。
做出你的贡献
在开始编辑现有文件或创建新文件之前,我们需要设置我们的遥控器,以便我们可以从 codio 拉取和推送更改。
设置遥控器:
- 通过在终端中执行以下命令切换到工作目录
cd zeroclickinfo-goodies
- 通过执行以下操作将您的第一个遥控器添加到 GitHub 上的主 DuckDuckGo 存储库
git remote add upstream https://github.com/duckduckgo/zeroclickinfo-goodies.git
- 由于您已经将您的 GitHub fork 克隆到您的 codio 机器上,它已经为您的 GitHub fork 设置了一个远程源,或者您仍然可以这样做以确保
git remote add origin https://github.com/your_username/zeroclickinfo-goodies.git
在编写备忘单之前,您需要使用您的 GitHub 帐户登录到 IAs 页面,并以与备忘单的名称相同的名称创建一个新的 IA 页面,例如我写了一个 lolcode 备忘单作为我的第一个贡献,所以我命名为IA 页面 Lolcode Cheat Sheet,我添加了描述和源描述。来源只是一个网站,我在那里找到了有关 Lolcode 关键字和转义序列的基本信息,其余的只是复制粘贴。
写备忘单
Duckduckgo 备忘单只是一个单独的 json 文件,其中的信息以键值对的形式存储。所有备忘单都存储在
zeroclickinfo-goodies/share/goodie/cheat_sheets/json
.因此,继续我的 lolcode 备忘单示例,让我们开始编写它。
- 制作 IA 页面后,您需要返回 codio.com 并打开终端并切换到您的工作目录
cd zeroclickinfo-goodies
- 在做出任何贡献之前,您应该创建自己的分支,该分支稍后将与上游存储库的主分支合并。为此,请执行以下操作
git checkout -b lolcode
您的分支名称可以是任何名称,但因为我使用的是我的示例,所以我使用了 lolcode。请记住始终创建一个新分支,并且永远不要在主分支中进行更改,否则您最终可能会惹恼很多人。
- 现在我们将通过执行以下操作来生成样板 json 文件:
duckpan new --cheatsheet.
它会提示您输入名称,您将输入名称并按回车键。例如,让我们命名备忘单 lolcode 并按回车键。您将在文件树中看到一个名为 lolcode.json 的新 json 文件
- 单击您的样板文件,它将在新选项卡中打开,现在您可以开始编辑它。
- 如您所见,大部分工作已经为您完成,您需要做的就是编辑一些字符串。从添加元数据开始
"id": "lolcode_cheat_sheet", "name": "lolcode", "description": "lolcode keywords and how to use them", "metadata": { "sourceName": "Esolang wiki", "sourceUrl": "http://www.your-source-url/" },
- 现在填写别名。这些是用户将查找的搜索字符串,例如,如果我搜索“cpp 备忘单”或“c++ 备忘单”,cpp 和 c++ 是别名,备忘单是触发器。
例如,对于 lolcode 备忘单,我们将只有 1 个别名。"aliases": [ "lolcode" ],
- 如果您要制作编程备忘单,请选择代码模板
- 现在我们填写不同的部分,信息将以键值对的形式填写,假设我的 lolcode 备忘单有一个数据类型部分,我想显示一个数据类型及其定义,那么数据类型将是“键”和定义将是“值”,节名称将是数据类型
"sections": { "Data Types": [ { "val": "It is an integer", "key": "NUMBR" }, { "val": "It is a float", "key": "NUMBAR" } ] }
- 您还必须给出部分顺序,例如
"section_order": ["Data Types", "Escape Sequences"]
验证备忘单
您可以使用 JSON 验证器来验证您的 json,并将您的 JSON 复制粘贴到验证器中。
现在在终端中使用以下命令验证您的备忘单代码
duckpan test CheatSheets
如果您没有收到警告,则意味着您的备忘单没有问题。
测试你的备忘单
- 转到终端并输入
cd zeroclickinfo-goodies
- 现在输入
duckpan server
然后按回车
- 现在单击屏幕顶部的 DuckPAN 服务器按钮,这将打开一个带有 DuckDuckGo 主页的新浏览器选项卡
- 现在搜索您的备忘单,例如 lolcode 备忘单,您将看到类似这样的内容。
推动你的改变
现在您需要提交并将您的更改推送到您的分支。
- 返回 codio 并检查您是否仍在工作目录中 zeroclickinfo-goodies
- 现在通过执行添加并提交所有更改的文件
git add
按回车
git commit -m "Description of your changes"
按回车
- 现在通过执行将您的更改推送到您的 GitHub 分支
git push origin branch_name
输入您的 GitHub 用户名和密码后,系统将提示您输入您的分叉将被更新。
起草你的拉取请求
- 转到您的 GitHub 分支并检查您的备忘单是否已更新。如果是,那么您已准备好提出拉取请求
- 点击绿色的“New pull request”按钮
- 查看更改并单击“创建拉取请求”
- 输入拉取请求的标题和描述以及 IA 页面链接,例如“New Lolcode Cheat Sheet”
- 最后点击创建拉取请求
结论
如果您已成功完成上述步骤,那么恭喜您做出了第一个开源贡献。现在你必须记住一些事情,备忘单是最低优先级的任务,可能需要几个月的时间才能合并,所以你必须等待。