如何给 GNU 项目贡献代码

GNU 的项目都通过邮件列表和全世界的贡献者交流,所以你应该先去 https://lists.gnu.org/mailman/listinfo 找到相应项目的邮件列表。一般建议加入 bug 和 devel 两个邮件列表。比如 Emacs,找到 Emacs-devel 和 bug-gnu-emacs 邮件列表并订阅,前者用于讨论改进、提新的 feature 等,后者用于反馈 bug、提交 patch。

邮件列表的邮件量一般都比较大,尤其是加入了多个项目的邮件列表后,不仅信息多,还很杂乱,所以建议:

1、 建立文件夹,如图,QQ 邮箱:

如何给 GNU 项目贡献代码

2、 做收信规则,根据收件人规则把邮件移动到相应的文件夹中。如图,QQ 邮箱:

如何给 GNU 项目贡献代码

2、修改代码

GNU 项目有自己的代码仓库,在这里:https://savannah.gnu.org/ 。

找到 Emacs 的 Git 仓库:

然后把代码拉回本地:

$ gitclonegit://git.sv.gnu.org/emacs.git -b emacs-25

Emacs 有很多分支,目前的开发主要在 emacs-25 这个分支上进行,所以上面命令我是从 emacs-25 分支上拉取的代码。

一段时间后维护者会把代码合并到 master 分支中。

如果之前已经拉过代码了,在修改前记得 pull 一次来保持代码是最新的:

$ git pull

不要在当前分支上修改代码,理由有很多,比如官方不一定接受你的 patch。而是对每修一个 bug 都新建一个分支:

$ git checkout -b tramp-sh-add-doas --track emacs-25

这行命令我新建了一个叫“tramp-sh-add-doas”的分支,取名要有含义,尤其是你在要修复多个 bug 时好区分。这个名字的含义是为了在 tramp-sh 里增加 doas 命令的支持。

接下来是漫长的编码阶段,主要注意两点:

编码风格统一,最简单的方法就是看看同文件里别人是怎么写的,他的缩进、命名、花括号位置等等。

不要去修改无关的代码,比如去动了其他位置的缩进等等。不然维护者会很疑惑。

代码写完后,commit 一下:

$ git commit -a

写一段好的 commit 也很重要,最简单的方法就是执行 git log,看别人怎么写的。一般 commit 的第一行写清楚你本次修改是做了什么,再空一行,逐行列出增加、修改的函数和变量等,让开发者一目了然,比如:

Author:XiLu<lx@shellcodes.org>

Date:FriDec1110:52:082015+0200

Initial support forRubyin'etags'

* lib-src/etags.c <Ruby_suffixes>:New variable.

(lang_names):Add an entry forRuby.

(Ruby_functions):Newfunction.(Bug#22116)

提交 commit 后,执行以下命令生成一个 patch 文件:

$ git format-patch emacs-25

这行命令会把当前分支修改的内容和 emacs-25 分支做 diff,然后在当前目录下生成一个 diff 文件,如:0001-Add-support-for-doas-command.patch。

生成的 patch 文件是需要发到邮件列表里,相关文件的维护者会跟你沟通并合并到代码仓库中的,和 Github 上直接发 Pull Request 来比,就没那么幸福了。

最后,把补丁发送到邮件列表去(这里或许你需要配置一下 Git 的发送邮件,请自行找资料):

git send-email --to=bug-gnu-emacs@gnu.org 补丁文件1补丁文件2补丁文件..

之后 GNU 的 bug 跟踪系统会确认你的 bug,并给你提交的 bug 分配一个 ID,然后自动回复一封邮件给你:

如何给 GNU 项目贡献代码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15498.html