如何给 GNU 项目贡献代码

如何给 GNU 项目贡献代码

想为开源项目贡献你的代码吗?这里告诉你该如何入手。

本文以 Emacs 项目为例。

1、订阅邮件列表

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

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

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

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

2、修改代码

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

找到 Emacs 的 Git 仓库:http://git.savannah.gnu.org/cgit/emacs.git

然后把代码拉回本地:


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

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

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

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


  1. $ git pull

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


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

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

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

  1. 编码风格统一,最简单的方法就是看看同文件里别人是怎么写的,他的缩进、命名、花括号位置等等。
  2. 不要去修改无关的代码,比如去动了其他位置的缩进等等。不然维护者会很疑惑。

代码写完后,commit 一下:


  1. $ git commit -a

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


  1. Author: Xi Lu <lx@shellcodes.org>
  2. Date: Fri Dec 11 10:52:08 2015 +0200
  3. Initial support for Ruby in 'etags'
  4. * lib-src/etags.c <Ruby_suffixes>: New variable.
  5. (lang_names): Add an entry for Ruby.
  6. (Ruby_functions): New function. (Bug#22116)

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


  1. $ git format-patch emacs-25

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

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

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


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

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

然后就等待相关维护者回复邮件与你沟通。在和开发者沟通时就事论事,不要说无关的废话。另外一定要注意回复邮件的风格,社区一般使用的 Bottom-posting(下回复)风格,实际上很多开源软件都是用的 Bottom-posting 风格的。如果这方面你不熟悉,请参考维基百科学习一下: https://zh.wikipedia.org/wiki/%E5%9B%9E%E5%B8%96%E9%A3%8E%E6%A0%BC 。QQ 邮箱网页版是不支持下回复的,最好用邮件客户端来回复,一般邮件客户端是可以设置成 Bottom-posting 风格的,请 Google 自行查阅设置方法。

开发者和你进一步沟通,完毕之后会关闭这个 bug,并把代码合并到仓库中去。

你的代码在合并到仓库之前可能还会有一道障碍,直到清除障碍后代码才可以进入仓库——签协议。

3、签署协议文件

如果你贡献的代码超过15行(见:https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html),是需要和 FSF(自由软件基金会)签纸质协议的。

签协议的主要目的是证明代码由你所写,没有侵犯到其他版权,并且版权归给 FSF。

如果你提交的代码确实需要签文件,开发者会邮件回你一个申请表模板,让你按模板内容填写一封申请邮件给 FSF 来申请签协议文件的。

模板内容如下(注:“#”是我自行添加的注解):


  1. ----------------------------------------------------------------------
  2. REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
  3. [What is the name of the program or package you're contributing to?]
  4. # 你贡献的项目名称,比如Emacs。
  5. # 注意一个项目只能签一份协议,如果你这里写多个项目,就需要签多份协议。
  6. [Did you copy any files or text written by someone else in these changes?
  7. Even if that material is free software, we need to know about it.]
  8. # 解释你贡献的代码里是否用了其他项目代码,如果有就列一下。
  9. [Do you have an employer who might have a basis to claim to own
  10. your changes? Do you attend a school which might make such a claim?]
  11. # 是不是以你个人名义来提交代码的,是的话就写no。
  12. # 如果是公司名义,好像需要公司和FSF再签协议,这个流程我不熟悉。
  13. [For the copyright registration, what country are you a citizen of?]
  14. # 一般就写China。
  15. [What year were you born?]
  16. # 你生日。
  17. [Please write your email address here.]
  18. # 你邮件地址。
  19. [Please write your postal address here.]
  20. # 通信地址,需要写详细点。
  21. [Which files have you changed so far, and which new files have you written
  22. so far?]
  23. # 你改变了哪些文件,列出来。

把这封邮件发给 copyright-clerk@fsf.org, 邮件标题是你真实的姓名 ,邮件内容就是上面模板填写后的内容。

然后 FSF 会审核你的申请,一般需要几天。审核通过后他们会给你发一封邮件,让你将附件的 PDF 文件打印下来,然后签字,签上你的名字(不要用中文),以及写好日期(日期的月份需要用英文,不要用数字,如:2015 December 30)。

接下来,把签完的纸质协议寄到美国去。你可以去淘宝找 DHL 快递代收,DHL 大概3天就到了,费用大概是¥140~¥160之间。

他们收到你的纸质协议后也会签字,需要等几天,具体周期视他们处理情况而定,如果你等了两周都还没回你,那么你可以回邮件问问怎么回事,比如我的就正好遇到圣诞节放假。

最后,他们会把签字后的扫描件以 PDF 格式发送到你的邮箱,整个过程算是结束了。

如果你换了工作,也请告知他们,有可能会涉及到协议重签,比如你到了新公司,给他们提交的代码不再是个人性质。

Happy Hacking。

4、感谢

Xue Fuqiao、Eli Zaretskii

本文来自合作伙伴“Linux中国”

原文发布时间为:2013-04-02.

时间: 2024-09-26 15:21:56

如何给 GNU 项目贡献代码的相关文章

【转载】花20分钟写的-大白话讲解如何给github上项目贡献代码

      本文献给对 git 很迷茫的新手,注意是新手,但至少会点基本操作,有点基本概念的新手,我不会从怎么用 github 和 git 是什么开始讲的.如果作为新手你看书又看不进去,原理又太复杂,有没有直接了当告诉我们怎么给项目贡献代码,并和项目同步代码的大体流程.于是我快速写了这么个东西.一来整理下自己混乱的思路,二来想号召大家一起用 git 开发点东西,可是好几个同鞋只会寂寞的给自己 push.  我先说下 我之前对 github 操作的一些迷茫历程,然后之后是怎么解惑的.  1. 最最

向Node.js核心贡献代码的六个步骤

本文的目的是帮助您完成向 Node.js 核心文件贡献代码的第一个提交! 向 Node.js 贡献代码的方式有很多种.可以参与某个工作组(网站或者联机诊断工作组等)的工作,可以在 Nodeschools 开设课程提供 Node.js 的教学, 让那些有着同样困惑的人可以向你学习. 当然你也可以开始直接向 Node.js 的核心贡献,比如回答使用者的问题,甚至向项目提交代码. 接下来,我们介绍提交代码以获取乐趣和成就感的必要步骤. # 1 Fork 项目 请访问位于 https://github.

向OpenStack贡献代码的分步说明

OpenStack 是一种http://www.aliyun.com/zixun/aggregation/13748.html">基础架构即服务 (IaaS) 云计算项目,该项目是根据 Apache 许可证的条款发布的免费开源软件.该项目由 OpenStack Foundation 管理,该机构于 2012 年 9 月建立,是一个实体型非营利组织,旨在促进.保护和授权 OpenStack 软件及其社区. 资源通过一个仪表板来管理,该仪表板向管理员提供了控制权,并通过一个 Web 接口为用户

如何为 PHP 贡献代码

PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天写这篇文章, 就是为了给在国内的同学们, 愿意为PHP开源社区做贡献的同学们, 做个示例, 如何为PHP来贡献你的智慧. 现在, 假设你要为贡献一个新特性, 或者简单点, 你要为PHP修复一个bug(一般来说, 大家可以在这里发现PHP已经报告的bug: 注册github 2. fork PHP的源

用于统计项目中代码总行数的Python脚本分享

  这篇文章主要介绍了用于统计项目中代码总行数的Python脚本分享,本文直接给出实现代码,需要的朋友可以参考下 最近需要统计一下项目中代码的总行数,写了一个Python小程序,不得不说Python是多么的简洁,如果用Java写至少是现在代码的2倍. [code] import os path="/Users/rony/workspace/ecommerce/ecommerce/hot-deploy/" global totalcount totalcount =0 def cfile

jboss5 1 tiles ssh2-jboss5.1 部署ssh2项目,代码和数据库编码GBK。使用tiles 跳转页面失败

问题描述 jboss5.1 部署ssh2项目,代码和数据库编码GBK.使用tiles 跳转页面失败 1.发起请求url=""/top/serviceStat/listAction.action""2.struts esb.ServiceStat.list3. 问题描述:1.发起请求后,jsp页面不显示或显示不全2.如果代码和数据库都是UTF-8编码.发起请求时中文乱码(过滤器已经配置)

平台-不同项目之间代码调用问题

问题描述 不同项目之间代码调用问题 一个是运营平台,一个是app平台,都是相互独立的,但操作的数据库是同一个.如果向运营平台提供接口,让他们调用?谢谢 解决方案 使用web service,web api

用什么软件运行别人的java项目的代码

问题描述 用什么软件运行别人的java项目的代码 解决方案 解决方案二:装个jdk就可以了.如果项目是用某个ide建的,那还需要装那个ide(如elipse,jbuilder等)解决方案三:用tomcate发布后直接用浏览器查看.

Linux基金会:中国贡献代码少没关系只要用就好

图为Linux基金会执行董事Jim Zemlin接受新浪科技独家专访 7月1日傍晚消息,Linux基金会执行董事Jim Zemlin,6月30日下午在北京接受新浪科技独家专访时表示,他不介意中国开发者贡献的代码少,只要愿意用开源软件就是做贡献. 6月29日至30日,由中国开源软件推进联盟主办的2009年开源中国开源世界峰会在北京举办.Linux基金会执行董事Jim Zemlin出席会议并发表演讲.6月30日下午,Jim Zemlin接受了新浪科技独家专访,谈到了Linux技术特点.桌面领域市场占