likes
comments
collection
share

如何给开源项目做贡献

作者站长头像
站长
· 阅读数 4

大部分互联网从业者都接触过不少开源项目,特别是工程师几乎离不开开源社区。那么我们如何积极参与开源社区,为开源项目做贡献呢?希望您读完本文能有所收获,一起参与开源项目。

什么是开源?

开源是指在许可证的许可下向公众提供可以查看、使用、修改和分发的源代码。 无论是个人、公司、小型企业、非营利组织还是政府机构,开源代码通常符合企业或个人的最大利益。

提交代码流程

提交代码的流程通常如下:

  1. 派生一个项目
  2. 从 master 分支创建一个新分支
  3. 提交一些修改来改进项目
  4. 将这个分支推送到 GitHub 上
  5. 创建一个拉取请求
  6. 讨论,根据实际情况继续修改
  7. 项目的拥有者合并或关闭你的拉取请求
  8. 将更新后的 master 分支同步到你的派生中

示例

下面通过一个场景来实操如何给开源项目提交代码。

Tony 在找一些能在他的 Arduino 微控制器上运行的代码,他觉得github.com/schacon/bli… 中的代码不错。

如何给开源项目做贡献

但是有个问题,这个代码中的的闪烁频率太高,我们觉得 3 秒一次比 1 秒一次更好一些。 所以让我们来改进这个程序,并将修改后的代码提交给这个项目。

他想给项目贡献代码

首先,单击“Fork”按钮来获得这个项目的副本。 我们使用的用户名是“tonychacon”,所以这个项目副本的访问地址是: github.com/tonychacon/… 。 我们将它克隆到本地,创建一个分支,修改代码,最后再将改动推送到 GitHub。

# 将派生出的副本克隆到本地
$ git clone https://github.com/tonychacon/blink
Cloning into 'blink'...

$ cd blink

# 创建出名称有意义的分支
$ git checkout -b slow-blink
Switched to a new branch 'slow-blink'

# 修改代码
$ sed -i '' 's/1000/3000/' blink.ino
# If you're on a Linux system, do this instead:
# $ sed -i 's/1000/3000/' blink.ino (3)

# 检查改动
$ git diff --word-diff
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
}

# 将改动提交到分支中
$ git commit -a -m 'three seconds is better'
[slow-blink 5ca509d] three seconds is better
 1 file changed, 2 insertions(+), 2 deletions(-)

# 将新分支推送到Github的副本中
$ git push origin slow-blink
Username for 'https://github.com': tonychacon
Password for 'https://tonychacon@github.com':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
 * [new branch]      slow-blink -> slow-blink

给源项目创建拉取请求

现在到 GitHub 上查看之前的项目副本,可以看到 GitHub 提示我们有新的分支, 并且显示了一个大大的绿色按钮让我们可以检查我们的改动,并给源项目创建拉取请求。

如何给开源项目做贡献

很快,维护者会将你的所有更改合并到该项目的主分支中(除非他们需要你的更改)。 合并更改后,你将收到一封通知电子邮件。

让你的 GitHub 公共仓库保持更新

当你派生了一个 GitHub 仓库之后,你的仓库(即你的“派生”)会独立于原仓库而独立。 特别地,当原仓库有新的提交时,GitHub 会通知你:

This branch is 5 commits behind progit:master.
(本分支落后 progit:master 5 个提交。)

但你的 GitHub 仓库不会被 GitHub 自动更新,这件事必须由你自己来做。还好,这事儿很简单。

第一种方法无需配置。例如,若你从 github.com/progit/prog… 派生了项目, 你可以像这样更新你的 master 分支:

# 如果在另一个分支上,就切换到 master
$ git checkout master
# 从 https://github.com/progit/progit2.git 抓取更改后合并到 master
$ git pull https://github.com/progit/progit2.git
# 将 master 分支推送到 origin
$ git push origin master

这虽然可行,但每次都要输入从哪个 URL 抓取有点麻烦。你可以稍微设置一下来自动完成它:

# 添加源仓库并取一个名字,这里叫它 progit
$ git remote add progit https://github.com/progit/progit2.git
# 将 master 分支设置为从 progit 远端抓取
$ git branch --set-upstream-to=progit/master master
# 将默认推送仓库设置为 origin
$ git config --local remote.pushDefault origin

搞定之后,工作流程为更加简单:

# 如果在另一个分支上,就切换到 master
$ git checkout master
# 从 progit 抓取更改后合并到 master
$ git pull
# 将 master 分支推送到 origin
$ git push

如果采用这种方式,建议不永远不要直接在master分支进行代码提交,因为当前配置的分支实际上属于上游仓库,在用户在其它分支开发和提交代码。

参考文档: GitHub-对项目做贡献