-
Notifications
You must be signed in to change notification settings - Fork 3
如何向GNU upstream贡献代码
-
向GNU社区仓库贡献代码首先需要签署FSF版权协议,签署成功后即可开始贡献代码,参考链接:
-
以gcc与binutils项目为例,首先需要将基准开发分支切换到upstream仓库分支(默认为master分支),这样可以减少冲突引起的额外工作量——
gcc upstream仓库地址: git://gcc.gnu.org/git/gcc.git
binutils upstream仓库地址: git://sourceware.org/git/binutils-gdb.git
-
与git工作方式相同,进行代码修改后使用
git add
,git commit
将修改进行记录,然后使用git format-patch
将修改的commit打包成patch文件,复杂的patch或多个patch往往需要添加cover-letter进行说明,以打包最近的三次commit为例:
mkdir outgoing && cd outgoing
git format-patch -3 --cover-letter
此时outgoing目录下会生成4个.patch
结尾的文件,我们需要对每个patch补充说明与Changelog信息,Changelog信息可以通过contrib/mklog.py脚本来生成模板——
./../contrib/mklog.py 0003-RISC-V-Add-testcases-for-ZCA-and-ZCF.patch
>>bfd/ChangeLog:
>> * elfxx-riscv.c (riscv_multi_subset_supports):
>>
>>gas/ChangeLog:
>> * config/tc-riscv.c (riscv_set_arch):
>> (s_riscv_option):
将模板复制粘贴到patch文件中,补充必要的说明即可,例如:
Subject: [PATCH 1/3] RISC-V: xxx. -> patch的标题,通常与commit相同。
This patch is xxx. -> patch的解释说明内容
- 安装
git send-email
,并配置.gitconfig
中的邮箱设置
sudo apt-get install git-email
vim ~/.gitconfig
>>[sendemail]
>> smtpEncryption = tls
>> smtpServer = smtp.gmail.com
>> smtpUser = yourname@gmail.com
>> smtppass = youremail password
>> smtpServerPort = ***
- 通过
git send-email
发送patch到邮件列表
git send-email outgoing/* --to gcc-patches@gcc.gnu.org --cc kito.cheng@gmail.com --cc andrew@sifive.com --cc ***
gcc邮件列表:gcc-patches@gcc.gnu.org
binutils邮件列表: binutils@sourceware.org
- 发送的patch可以在GNU的pipermail中查看,可以参考其他人的patch格式:
gcc patches: https://gcc.gnu.org/pipermail/gcc-patches/
binutils patches: https://sourceware.org/pipermail/binutils/
- 当收到邮件对patch修改后,需要将**"Subject: [PATCH]"更新版本号修改为"Subject: [V2 PATCH]",再次更新修改为"Subject: [V3 PATCH]"**,此时只需要使用
git send-email patches
单独发送修改的patch即可,例如我们只修改了0003--.patch
git send-email outgoing/0003-*-*.patch --to gcc-patches@gcc.gnu.org --cc kito.cheng@gmail.com --cc andrew@sifive.com --cc ***
- 最终Maintainer接受patch并合并后,可以在upstream的git中看到自己的commit:
gcc git upstream: https://gcc.gnu.org/git/?p=gcc.git;a=summary
binutils git upstream: https://sourceware.org/git/?p=binutils-gdb.git;a=summary