本文概述
- 什么是开源软件, 在哪里可以找到它?
- 如果我不知道如何编码怎么办?
- 如果我不认识Git怎么办?
- 如何选择GitHub上的项目?
- 现在我该怎么做?
- 创建一个叉子
- 该修复错误了
- 最后一步:拉取请求
- 最后的笔记
作为开发人员, 紧跟最新技术趋势是令人兴奋且充满挑战的。每天, 新的语言, 框架和设备都会吸引我们的注意力, 并在聚会, 论坛和聊天中激发对话。但是, 我们的开发人员社区是由人员而不是工具组成的, 并且探索其社会政治方面也很有趣(由于缺乏更好的用词, 如今, “ 社交” 往往与社交网络相关联)。
在srcmini, 我们最近进行了一些有趣的对话, 讨论了女性为开源做出了多少贡献以及可能阻止她们做出更多贡献的原因, 因此我们对此事进行了调查。在与Breanden Beneschott和Bozhidar Batsov进行的对话中, 我想知道:Bozhidar是GitHub上最大的开源贡献者之一。我在哪里?如果你今天检查我的公共GitHub帐户, 则主要是我在课堂上为学生使用的小型测试项目。他们半生不熟, 绝对不能代表我的技能或专业知识。 (你必须对此表示同意。)如果有人考虑根据他们在该帐户中所能找到的雇用我, 我想我会很难过日子。尽管如此, 我还是一名专业开发人员已有20多年了, 在我的日常工作中, 我使用的开源软件超出了我的记忆。随着时间的流逝, 我已经破解了Linux内核以使其满足某些特定需求, 调整了我购买的每台路由器和NAS, 耐心地在Raspberry Pi的等待列表中等待了几个月, 以获取我的自制知识, 我喜欢。尽管如此, 所有这些调整和测试都没有使我成为GitHub的开源工具。另外, 除了修复Tomcat的第一个版本中的一个错误外, 我从未为开源项目做过任何贡献。很好奇, 不是吗?
你可能会认为只是时间或兴趣不足, 但我知道并非如此。至于我的个人项目, 我可能以为没有人会对我所做的事情真正感兴趣, 但主要是, 在那儿发表我的作品, 让所有人看到并为后代留下的想法让我非常害怕。虽然你总是可以从GitHub拆下一个个人项目, 但是当你尝试为一个广泛可用的开源项目做出贡献的那一天, 就没有回头路了。如果我的代码不够好怎么办?如果我对问题的理解不正确怎么办?如果我的拉取请求被拒绝怎么办?如果人们拖我了怎么办?
文章图片
对开源做出贡献会吓到你吗?
鸣叫
与朋友开发人员(大多是女性)的快速通话很快使我确信, 我不是唯一遇到此问题的人, 但对于工程师来说, 没有问题, 只有解决方案, 对吗?
这是一个要解决的重要问题, 因为为开源项目做贡献会产生巨大的变化:
- 在你的职业生涯中:许多客户在决定雇用你之前会仔细考虑你的社交情况。你的GitHub帐户和LinkedIn简历以及你的Facebook和Twitter个人资料位于列表的顶部。你应该明智地使用它们。
- 对于你的技术技能:检查其他开发人员(通常是非常优秀的开发人员)编写的代码库, 对你有很多帮助。从写得不好的代码库中解脱含义的能力将挑战并同样教你。
- 对于你的软技能:开源软件是一个协作过程, 几乎所有有趣的项目都是由团队构建的。通过每个人使用的工具来学习与其他开发人员的工作, 与团队融为一体, 进行有效的沟通, 这将使你成为一名出色的开发人员, 而不仅仅是一个熟练的开发人员。
- 对于社区:你对开源项目做出的每一分都至关重要。你贡献的越多越好, 但是即使在翻译中固定一个小错字也会使最终产品更好。
- 对于你的网络:你可以将数百份简历发送给公司, 但是没有什么可以让同事拥有个人联系的。积极参与开源项目将确保你与人见面并赢得他们的尊重, 并且声誉将不断增长, 这对于任何专业人员而言都是无价之宝。
什么是开源软件, 在哪里可以找到它? 开源软件(简称OSS)是随其源代码发布的任何软件, 并包含允许你修改和重新分发它的许可证。它可以传递到任何地方:在网站上, 通过邮件列表或与猫头鹰一起传递。最常见的场景是我们感兴趣的场景, 该场景是在协作存储库上维护代码库时。在这里, 我们将重点放在GitHub上, 但还有其他选项, 例如SourceForge和Bitbucket。 GitHub非常友好, 拥有庞大的用户基础, 可用于任何类型的代码以及你使用的任何开发环境。重要的是, 它还广泛用于非开源项目。你的下一个客户项目很可能会在这里托管, 因此了解如何使用它本身就是一项有用的技能。
如果我不知道如何编码怎么办? 如果你正在阅读本文, 则可能想学习编码。你可以在几个免费和付费的网站上找到惊人的课程。你应该选择一种语言来学习;如果你没有偏好, 请使用JavaScript。你已经拥有在网络浏览器上启动所需的一切, 并且它是使用最广泛且可销售的技能之一。我个人最喜欢的是Python, 它可用于Web开发和科学应用程序。我也有一个个人最喜欢的入门课程, 即关于Udacity的” 计算机科学入门” 。我喜欢它, 因为它是一门动手课程, 你可以在学习过程中从事一个项目。你还可以在Coursera, Khan Academy和PluralSight上找到其他几门课程。
如果我不认识Git怎么办? 如前所述, 了解Git很重要, 因此, 参加Git课程。即使你已经与Git合作了一段时间, 也要这样做;在真正学习Git之前, 你不知道有多少。如果你不能自信地说明rebase命令的作用, 请执行此操作。即使重新设置错误不会吓到你, 也要这样做。我在Code School上学习了完整的Git路径, 但是同样, 你可以浏览其他站点以获得更多选择。
如何选择GitHub上的项目? 你可能在日常开发中使用了一些OSS。选择一个熟悉的框架是一个很好的起点。你已经熟悉这些功能以及框架的工作原理。当你深入研究源代码时, 你将学到更多, 并且将更加清楚地了解其逻辑。如果你特别喜欢某项技术或工具, 请查找提及该技术或工具的项目, 或者寻找该工具的项目本身。作为最后的选择, 你可以在GitHub Showcases上检查项目, 并从选择你感兴趣的类别开始。
例如, 在GitHub的搜索中快速搜索” Raspberry” 会显示超过17, 000个存储库。很容易迷路, 因此请寻找一个社区良好, 问题跟踪良好的项目。选择项目时, 请检查以下项目的数量:
- 贡献者:以超过十个贡献者为目标。这应该确保项目具有足够的兴趣, 而不仅仅是团队的小努力。如果你是OSS的新手, 或者不是很熟练, 则将搜索范围限制在最多50个贡献者的项目中。更大的社区意味着更大的代码库和更复杂的项目。
- 提交:进行至少具有一千次提交且最近活动不超过一周的项目。闲置一个月或一个以上的项目在OSS方面已经过时而且陈旧, 你可能不会很快得到任何答复。日常活动是一个健康项目的标志。
- 问题:问题是未解决的问题, 已报告的错误或要求实施的功能。它们将为你提供一个起点, 并且是衡量该项目兴趣的良好指标。
文章图片
我选择了ScyllaDB(一个列式数据存储项目), 因为我对与性能相关的任何数据都着迷。我从未使用过它, 但是我希望能够深入研究它的代码库。使用我所知道的工具可能会更简单, 但是我将其视为挑战和学习新知识的机会。对于其余部分, 它完全适合该帐单;它有18个贡献者, 6.5k提交(最新的是在撰写本文时23小时之前), 178个未解决的问题, 并且似乎很活跃。
现在我该怎么做? 首先, 克隆存储库并在计算机上安装软件, 以了解其活动部件。然后, 开始阅读问题。准备就绪后, 请查看是否可以在计算机上重现该问题, 然后开始分析是什么导致软件行为异常。
另一种方法是找到可以自己改进或修改的东西。举例来说, 你可能会注意到输入错误或字体未对齐。我选择修复一个小错误, 特别是在脚本文档中使用了错误的变量名。
看起来很小, 但是错误的文档比没有文档更糟糕。用户将安装ScyllaDB并按照安装步骤进行操作, 他们将盲目地依赖该脚本中编写的内容, 并且最终会感到沮丧。这对我的能力来说是完美的, 要解决此问题, 我将需要遵循整个过程, 并对代码库有所了解。错误修复很无聊, 但是这是找到进入项目的一个很好的开始。
创建一个叉子 这可能是微不足道的, 但是目前, 对于ScyllaDB项目, 我是Nobody女士。让我在没有监督的情况下更改其代码会很冒险。我需要做的是在自己的GitHub帐户中创建一个” fork” 。这是我的ScyllaDB分支。在我自己的操场上, 我可以访问所有代码, 并且可以根据需要修改文件。如果我想创建自己的ScyllaDB版本并将其调整为与原始用途完全不同的方法, 则可以在这里进行。创建一个叉子很简单;转到项目的主页, 然后单击” 叉子” 按钮。一点也不可怕。
该修复错误了 现在, 是时候在计算机上测试代码并进行必要的修改了。首先, 请确保已在计算机上安装了Git客户端。然后, 将SSH公钥添加到GitHub, 并确保它已由ssh-agent加载。在本地获取代码很简单;只需使用指向你的fork的git clone命令, 而不要使用main分支即可:
git clone [email
protected]:acbellini/scylla.git
到目前为止, 你应该已经在main分支上测试了项目, 因此你将在本地构建代码并以相同的方式对其进行测试。请记住, 由于引用是相对的, 因此你将不得不分叉项目所依赖的任何其他GitHub项目。就我而言, 我不得不分叉海星, scylla-ami和scylla-swagger-ui。
我需要修复的错误相对简单; conf / scylla.yaml中的文档提到了三个可配置目录:一个用于数据文件, 一个用于提交日志, 一个用于缓存(显然未使用), 所有这些缺省都位于$ CASSANDRA_HOME的某个子目录中:
文章图片
文章图片
深入研究代码, 它表明默认值是不同的, 并且, 正如我在第372期中提到的那样, 不应使用$ CASSANDRA_HOME。我通过使用几个不同的设置测试代码, 从配置文件中删除设置并检查使用的目录来验证我的假设。一旦确信一切都正确, 我就可以添加, 提交和推送修改后的文件:
git add conf/scylla.yaml
git commit -m 'Correct default directories values in conf/scylla.yaml #372'
git push
请注意, 我在提交消息中引入了发行号, 并在其前面加上了哈希。这将告诉GitHub自动将我的代码链接到问题本身。
还要注意的另一件事是, 当我检查代码时, 我意识到实际上没有使用第三个目录(用于缓存的目录)。试图走得太远并自行删除此设置, 或添加未使用的注释, 这很容易, 但这超出了问题#372的范围, 并且提交与该规则不完全相关的任何内容将是错误的问题。你必须集中精力进行更改, 并将更改限制在手头的任务上。
至此, 代码已修复, 位于我的私有fork中的GitHub上。这是最可怕的部分:请ScyllaDB人员接受我的代码。这称为拉取请求。
最后一步:拉取请求 我喜欢直接从GitHub的Web界面创建请求请求。与从命令行尝试相比, 我发现它更直观, 更防错。创建我的拉取请求所需要做的就是单击分支名称旁边的绿色小按钮:
文章图片
请注意, 注释是由GitHub自动计算的。我的分支现在有一个新的提交, 但是自从创建分支以来, 主存储库中又有14个提交, 因此我将单击左侧的绿色图标。
文章图片
幸运的是, 我的一次提交与其他14个提交没有冲突, 因此GitHub告诉我, 我很好。我不需要添加任何其他评论或消息。提交消息虽然很简短, 却说明了一切:我的代码更改做了什么以及与代码相关的内容。当我单击最后一个按钮以确认我的请求时, 我不知道几天前我感到如此恐怖的是什么。现在没有怪物在向我咆哮, 地狱的火焰似乎没有在燃烧。老实说, 这一点都不可怕。在极少数情况下, 如果我弄错了, 我的修复程序将不会被接受, 仅此而已。
如果现在查看问题详细信息, 则可以看到GitHub自动添加了一条注释, 说明存在一个引用此问题的请求请求。这就是提交消息中#372的魔力。这将有助于避免其他人浪费时间来修复已经解决的问题。
文章图片
开源一点也不可怕。
鸣叫
最后的笔记 【开源(没那么可怕!)】现在, 我正在等待我的请求请求被接受, 当这种情况发生时, 我将收到通知。请记住, 这可能需要几天甚至几周的时间;有人必须检查我的代码, 测试它是否能按所述方法工作, 解决问题, 并最终确保它不会对其余代码的功能产生不利影响(请参阅:创建新的错误)。所有这一切都需要花费一些时间, 因此请耐心等待。最后, 当我的请求请求被接受时, ScylaDB将有一个更多的贡献者, 一个更少的问题, 而我将有我的第一笔OSS贡献。现在, 你也该尝试一下。毕竟, 这一点都不可怕。
推荐阅读
- React,Redux和Immutable.js(高效Web应用程序的组成部分)
- 响应式设计不足,我们需要响应式性能
- BEM方法论简介
- 如何使用Rails助手(Bootstrap轮播演示)
- PHP 7简介(新增功能和已消失的功能)
- 跨页面重新加载的持久数据(Cookie,IndexedDB及其之间的所有内容)
- GWT工具包(使用Java构建强大的JavaScript前端)
- NodeOS(基于JavaScript的操作系统)
- 改善Meteor应用中项目结构的开发人员指南