现在就参与到开放源——如何为GitHub寄宿的开放源项目(例如Code52)贡献修补补丁程序

[原文发表地址] Get involved in Open Source today - How to contribute a patch to a GitHub hosted Open Source project like Code 52

[原文发表时间] 2012-1-25 2:12 AM

自从我发表博文如何为一个开放源码项目贡献修补程序以来,已经过了五年了。作为源控件系统,该博文主要侧重于Subversion。如果你正在使用CodePlex 和Subversion作为示例,那些指示运行得很好。这里是 对GitHub 项目相同的想法。

总是有人给我发电子邮件,询问我一些问题,像"如何能够成为更好的程序员?""如何获得更多经验?"或者甚至非常具体"怎样可以让我的简历更有吸引力?"我的答案几乎总是参与开放源。

参与开放源项目的工作。修复缺陷,做他们的网站,编写一些文档。你甚至不必编写代码。很多开放源项目需要帮助,此帮助的意思是做论坛的工作,支持调用。人们忘记了开放源是由大多数的志愿者做的,他们是出于对它的喜爱才做得。他们展示了:

"只展示了80%的成功"- Woody Allen

有时开放源项目失败只是因为实际上只展示了一个或两个人的能力。日复一日。使用开放源码是容易的,但制作开放源却很难。

注: 此示例使用了 Git 和 GitHub。这并不意味着复杂或理想的。它是可行的,并正常运作,但如果你正在考虑参与开放源或为多个项目中和feature使用Git,或你将要探索更完整 (而且更复杂) 的工作流。这儿有一篇优秀的文章" 针对敏捷的团队的Git工作流",以及从 NuGet 团队建议的 Git 工作流,和 Ryan Bates 的关于Git的神奇截屏视频,以及Bobby Johnson的截屏视频介绍.

代码 52

它可以压倒一切事情,不过,一个大的开放源项目已建立了。也很难决定启动哪个小项目,因为没有人想要浪费他们的时间。你如何选择呢?

一些可爱的家伙 (Andrew TobinBrendan ForsterPaul Jenkins) 对于代码 52 已经开始了一个杰出的想法。每星期有新的编码项目。

好主意 !没有任何事情太难以至在一周之内都不能解决。这完全降低了进入壁垒,还能保持事情新鲜。它还为我们(指社区)创建了一大堆代码库,并进入到超过一周的更大的项目中。

那些家伙说他们算出一周,因为:

  • 短周期可以鼓励可实现的目标。
  • 短周期减少了拖延的动机。
  • 一段时间内有更多样化的项目。

贡献修补程序到GitHub 上的小开放源项目中

Code52 项目放置在 GitHub上。我放置了一些我自己的项目在BitBucket上, 其他的在 CodePlex 上。其实项目在哪里无关紧要,只要它能让你快乐。

假设我想贡献一个修复到他们几星期之前所工作的DownmarkerWPF 项目中。有几个我可以做的事。

提出一个问题

实际上提交一个 bug是你至少可以帮项目所能做到的。如果它不是 ragebug (只是告诉他们如何获取这些bug),但包括你对这个问题所知道的一切,可能是栈跟踪或屏幕截图,这样会更好。奖励积分如果你语气和善。

建议一个功能

很有帮助,并为他们的产品建议一个有趣或创新性的功能。奖励积分如果你包含了模型,建议一个设计或更好,开始实现它吧 !

交叉代码,更改它,然后做 " 拉请求 "

使用一些 SCC (源控件系统),你将在本地更改代码,打包为"patch/diff"文件,并发送该文件到项目团队中以供日后整合。你将想要为拼写变更和简单的东西使用此网站。

使用一些像 Mercurial 及 Git的较新系统,你将你的代码推送到中央地点,并发送"拉请求",说"嘿,代码是在这里,将其拉入,好吗?"

GitHub 将允许你在浏览器中进行更改,但这不是实际的代码更改。让我们获得DownmarkerWPF代码, 更改它,并提交一个拉请求。

它是一个可爱的针对Windows的Markdown编辑器。如果你不想要源,只是想要一个你可以运行的体面的压缩版本,你可以下载它.

因为我要去修复一个我认为是问题的东西,我会首先在站点上创建一个问题,并声明它。它是问题 82,所以我会记住这一数字。

我从网站交叉了代码,然后克隆我的副本到我的本地计算机上。请注意,我使用的 URL 是我的交叉代码。

C:\Code52>git clone https://shanselman@github.com/shanselman/DownmarkerWPF.
git
Cloning into DownmarkerWPF...
remote: Counting objects: 1870, done.
remote: Compressing objects: 100% (634/634), done.
remote: Total 1870 (delta 1347), reused 1728 (delta 1210)
Receiving objects: 100% (1870/1870), 11.40 MiB | 2.39 MiB/s, done.
Resolving deltas: 100% (1347/1347), done.

我能为我自己做一个分支来描述我在做什么,但我不会这么做,因为此示例中没必要引起混乱。

所以,当我和我的妻子使用Markdown编写一本书的时候,我喜欢Markdown编辑器的想法。然而,我的妻子和我 (和Leanpub.com) 正在使用 *.mkd 作为我们的扩展名,而 Code52 项目使用 *.md,*.markdown 和 *.mdown。这里是我可以做的一个虽小但很有影响力的变化。

我查找到代码,然后更改它。现在不要被此修复的影响所吓到。

    1: publicstaticclassConstants
    2: {
    3: publicstaticreadonlystring[] DefaultExtensions = new[] { , ".md" ".markdown", 
    4: , ".mdown" ".mkd"};
    5: ...
    6: }

现在我将编译和测试变更。它起作用了 !

现在,我会在本地提交我的变更,然后把它推到服务器中。添加、 提交和推动。

C:\Code52\DownmarkerWPF>git status

# On branch master

# Changes not staged for commit:

# (use "git add <file>..." to update what will be committed)

# (use "git checkout -- <file>..." to discard changes in working directory)

#

# modified: src/MarkPad/Constants.cs

#

no changes added to commit (use "git add" and/or "git commit -a")

C:\Code52\DownmarkerWPF>git add .

C:\Code52\DownmarkerWPF>git commit -m "#82 - Added .mkd extension support"

[master 17c5704] #82 - Added .mkd extension support

1 files changed, 1 insertions(+), 1 deletions(-)

C:\Code52\DownmarkerWPF>git push

Password:

Counting objects: 9, done.

Delta compression using up to 12 threads.

Compressing objects: 100% (5/5), done.

Writing objects: 100% (5/5), 453 bytes, done.

Total 5 (delta 4), reused 0 (delta 0)

To https://shanselman@github.com/shanselman/DownmarkerWPF.git

792d099..17c5704 master -> master

酷,所以现在,我可以在网站上看到我的问题# 82与我的变更相关联起来了,因为我在提交消息中使用了此数字。

现在,通过点击网站上的Pull Request,我会让项目管理员知道在哪里可以获取它。

现在我等了几分钟、 几小时甚至几天,等待项目的所有者接受我的请求。这完全取决于他们能接受什么和他们接受的条件。

这里是我的修复,现在由项目管理员接受、 合并和关闭。然后,他们将会关闭此问题。

开放源并不像看起来的那样可怕。现在去那里,提供你的帮助、 时间,为你最喜欢的项目提供援助。宣传它们,使用它们,修复其拼写和缺陷。你可以与代码 52 的家伙在 Jabbr 上的聊天室里玩或在代码 52 网站详细了解项目信息.

相关的链接

截图视频:为.NET开发人员在GitHub上的开放源项目做出一份贡献(第一部分)