jjzjj

开源共建,学会在 github 上提 issues

极客飞兔 2023-07-10 原文

✨ 目录

🎈 参与开源项目的必要性

  • 相信很多程序猿小白在自己的职业生涯中都本着 拿来即用 的特质
  • 对于 项目开源 都是 只闻其概念,不见其本质,大多数人都只停留在 观望阶段,这也与国内的开源环境有关,阻止国内程序员参与开源的一个重要的原因不是 技术能力 的限制,而是 英语水平 的限制
  • 阅读过某个开源项目源码的人很少,参加某个开源社区的人更少,更别说知道如何去参与开源项目 提 PR
  • 但是参与开源项目对于程序猿是必修课,也是必须学会的一门技能,参与开源的最大好处就是贡献所得到的 成就感。更深刻熟练的运用自己的技能,也可以获得更好的 认可度和知名度,建立更 广大的人脉

🎈 寻找合适的开源项目

  • 如果你决定参与开源开源项目,请记住:不要选择特别成熟的开源项目不要选择小规模的开源项目尽量选择知名开源软件基金会的孵化项目
  • 如果项目太成熟,由于参与的人数太多,你的成就很容易被淹没,很容易打击自己的自尊心和参与感
  • 如果项目太小,由于代码流程等各种不规范,你会变得束手束脚,会出现很多问题
  • 而开源软件基金会的项目,基本会介于这两者之间,既不会显得太不成熟,也可以让你有很好的参与感,比如 Apache 基金会Linux 基金会CNCF 等。
  • 你可以从 CNCF 沙箱项目 或者 Apache 项目 中找到适合自己的开源项目并参与其中

🎈 寻找项目问题 / issues

  • 在每一个项目仓库中,都会有 issues 板块,这里标注了该项目中还存在的各种各样的 漏洞文档完善测试用例完善bug 反馈 等等,等待着各位开源者一起去完善,共同将该项目的 issues 板块清空
  • 我们这里以 envoyproxy/envoy 开源项目为例,在这里可以看到很多待处理的问题,并且每个问题后面标注了显眼的标签,比如 bugtriageenhancement等等
  • 点击其中任意的标签,就可以筛选所有带有相同标签的问题吗,方便用户搜索自己想解决的某一类问题,如果你专注于处理 bug 问题,可以点击 bug 标签,出来的全是 bug标签 的待解决问题了

🎈 提出申请

  • 每一个开源项目中都会有 CONTRIBUTING.md 文件,这个文件会详细介绍如何开始当前的项目,感兴趣的可以自己去看看
  • 当你浏览完 issues列表 后,找到一个自以为可以解决的问题,点进去可以查看详情
  • 在浏览了这个 issues要求后,你觉得你可以解决的话,就可以给管理员留言
  • 静静等待管理员通过审核,将该任务指派给你即可进行开发了

🎈 Fork 开源项目

  • 首先在登录自己账号的状态下,fork 该仓库,将该仓库 fork 到自己的账号下
  • 因为你想修改原始仓库里面的东西,必须要有修改的权限,把该仓库 fork 到自己的账号下,意味着你有修改仓库里面文件的权限了
  • 其实 提交 PR 就是将你修改的内容推送到自己 fork 出来的代码中,然后再通过 Pull Request 将其合并入上游项目中即可


🎈 拉取项目到本地

  • 首先我们需要将自己仓库中 fork 过来的项目,拉取到本地
  • 当然拉取代码可以实用 SSH 方式,也可以实用 HTTPS 模式
  • 本地的代码变更永远只提交到 origin,然后通过 origin 提交 Pull Requestupstream
# 拉取项目
git clone https://github.com/autofelix/envoy.git

# 进入项目目录
cd envoy

# 配置上游仓库
git remote add upstream https://github.com/envoyproxy/envoy.git
git remote set-url --push upstream no_push

# 配置完成后,查看是否正确
git remote -v

# 结果如下
origin    git@github.com:autofelix/envoy.git (fetch)
origin    git@github.com:autofelix/envoy.git (push)
upstream    https://github.com/envoyproxy/envoy (fetch)
upstream    no_push (push)

🎈 开始自己的表演

  • 把项目拉到本地之后,你需要更新一下本地代码,让他保持跟上游 upstream 一致
  • 这是为了防止后期出现各种冲突,让你头大,毕竟解决冲突在协同开发中是最费心费力的
  • 当然,如果你只提交一个PR,可以直接在main 分支进行开发,但是当你爱上了开源,我相信你不会仅仅只会提交一个 PR,总之鼓励你通过创建分支去提交 PR,完成开源工作,会更加的规范
# 代码跟上游同步
git fetch upstream
git checkout main
git rebase upstream/main

🎈 Push 代码

  • 首先如果你解决的是一个bug,我建议你创建 fix 分支 git checkout -b fix-xxx,如果是文档类更新可以创建 docs-xxx,其他建议创建 chore-xxx,不同类型的 issues 创建不同的分支,清晰明了
  • 在修复好 bug 后,通过以下命令进行 push
git add <file>
git commit -s -m "some description here"
git push origin fix-xxx

🎈 创建 PR 并入上游

  • push 之后,打开 GitHub,可以看到一个提示框,系统告诉我们可以开一个 Pull Request
  • 点击该按钮之后,会有一个回复的格式模板,我们只要按照模板去修改其中的一些内容即可,不同的开源项目 PR 回复模板一般不同
  • 但是大体上都是需要填写你 这次PR的标题修改了哪些地方怎么测试的解决了什么问题等等
  • 提交了 PR 之后,我们就可以在 PR 列表里找到自己的 PR 了,不过需要注意的是 ci 检查 是不是全部能够通过,假如失败了,需要及时修复出错的修复,重新提交
  • 当你做完了这些,只要你的 PR 很完美,不出很长时间,管理员就会直接将你的 PR 合并到项目中,那么这一次的开源生命周期到此也就结束了,你可以重新寻找新的 issues 去完成

有关开源共建,学会在 github 上提 issues的更多相关文章

  1. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  2. ruby - vagrant 从 github 安装插件 - 2

    我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com

  3. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  4. ruby - 警告 : PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, 请参阅 : https://github. com/wayneeseguin/rvm/issues/3212 - 2

    我每次打开终端时都会收到这个错误:警告:PATH设置为RVMruby​​但未设置GEM_HOME和/或GEM_PATH,请参阅:https://github.com/wayneeseguin/rvm/issues/3212这是在我最近安装zsh(oh-my-zsh)后开始发生的我不知道如何设置GEM_HOME和/或GEM_PATH的路径。 最佳答案 我也面临同样的问题,更改.zshrc中的以下行,exportPATH="/usr/local/heroku/bin:.........."到exportPATH="$PATH:/usr/

  5. ruby - github api v3 创建问题消息未找到 - 2

    当我尝试创建一个github问题时,它给出消息未找到回复。以及如何发送身份验证header。因为创建问题需要用户登录或验证curl-XPOST-i-d'{"title":"my-new-repo","body":"mynewissuedescription"}'https://api.github.com/repos/barterli/barter.li/issuesHTTP/1.1404NotFoundServer:GitHub.comDate:Wed,19Feb201407:11:33GMTContent-Type:application/json;charset=utf-8Sta

  6. ruby - 如何在 github 操作中捆绑安装私有(private) gem - 2

    我想通过github操作在gem上运行rspec(称之为priv_gem_a)。priv_gem_a依赖于私有(private)存储库中的另一个gem(称之为priv_gem_b)。但是,由于权限无效,我无法捆绑安装priv_gem_b。错误:Fetchinggemmetadatafromhttps://rubygems.org/..........Fetchinggit@github.com:myorg/priv_gem_bHostkeyverificationfailed.fatal:Couldnotreadfromremoterepository.Pleasemakesureyo

  7. ruby - 如何使用 webhooks 从 Gitlab 推送到 Github - 2

    如果我只能找到正确的手册,我的Google-fu就会让我失望,因为这看起来很明显。我有一个由我们的托管服务提供商安装的Gitlab服务器Gitlab服务器有很多项目。对于其中一些项目,我希望Gitlab每次从本地客户端推送到Gitlab时自动推送到远程存储库(在本例中为Github)。像这样:客户端-->gitlab-->github任何标签和分支也应该被推送。AFAICT我有3个选择:用两个Remote配置本地客户端,同时推送到Gitlab和Github。我想避免这种情况,因为开发人员。在Gitlab服务器上的存储库中添加一个gitpost-receiveHook。这将是最灵活的(我

  8. ruby - 使用 overcommit 和 Github Desktop 时出错 - 2

    我在我的项目中使用过度使用gem(https://github.com/brigade/overcommit),当我使用GithubDesktopforosx时,我得到这些错误:ThisrepositorycontainshooksinstalledbyOvercommit,buttheovercommitgemisnotinstalled.Installitwithgeminstallovercommit.(1)gem已安装,它可以在终端中运行。我想这是因为我使用rvm而GithubDesktop不知道rvm。有人知道如何解决这个问题吗? 最佳答案

  9. ruby - Jekyll:如何在 GitHub 页面上使用自定义插件? - 2

    事实证明,由于securityconcerns,自定义ruby​​插件在GitHub页面上不起作用。.我正在尝试将插件(thisone)添加到我的Jekyll项目的_plugins文件夹中,但是当我将它部署到GitHub时,它会被忽略。问题:有没有办法解决这个问题?有没有人找到解决办法?注意:显然我可以在本地生成html文件并将它们提交到我的存储库。但这不是我想要的。 最佳答案 如果你想让Jekyll站点像在本地一样运行,比如让自定义插件正常工作,这里有一种非常方便的方式来构建和部署Jekyll站点到GithubPages。?AGi

  10. python - 开源 Twitter 克隆(在 Ruby/Python 中) - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有任何用Ruby或Python编写的生产就绪的开源Twitter克隆?我对功能丰富的实现更感兴趣,而不仅仅是简单的Twitter消息(例如:API、FBconnect、通知等)谢谢!

随机推荐