前言
从事linux开发的人经过会遇到一些奇奇怪怪的bug,在修复后,需要提交给linux社区合入,从此也是linux贡献人了呀。
还记得第一次提交社区补丁时,啥也不懂,用git怎么提交呀?提交给谁呀?提交后社区回复,如果要修改又该如何在修正后添加那些信息进行提交?
一、git和邮箱准备工作
如果你的linux系统是第一次提交,那么有可能会出现很多问题。
邮箱环境
本人使用的是网易邮箱,当然其他的邮箱也可以。
-
邮箱需要开启IMAP/SMTP和POP3/SMTP服务;
登录网页版网易邮箱https://email.163.com/后,点击最上方设置,点击进入"POP3/SMTP/IMAP",开启
IMAP/SMTP服务或POP3/SMTP服务,第一次开启会需要通过手机扫码验证发送短信后,获得一串"授权密码",这串授权密码很重要,而且只会出现一次,一定要保存好。
如果不记得了可以在下方"授权密码管理"点击删除,然后点击"新增授权密码",重新获得一个新的密码。 -
给git配置上使用刚刚开启SMTP服务的邮箱;
直接修改git在用户目录的.gitconfig文件添加如下字段,这里还是以网易邮箱为例:
[user]
email = xxx@163.com
name = <name>
[sendemail]
smtpencryption = ssl
smtpuser = xxx@163.com
smtpserverport = 465
smtpserver = smtp.163.com
smtppass = ******
其中smtppass所填写的字段,就是在第一步里面获取到的"授权密码"。
注:
user.email的邮箱地址要与sendemail.smtpuser的邮箱地址一致,不然在发送补丁时,git会报错如下:
Mail from must equal authorized user
所以,可以在发送补丁时先把两个邮箱地址改为一样,等发送完后,再更换回来。
git环境
本人使用的是kylinOS的操作系统,第一提交时遇到的如下几个问题:
- git没有send-email的指令,需要安装git-email指令如下:
sudo apt-get install git-email
安装后,你就能使用git send-email的cmd了
- email需要用到perl,如果有如下错误提示:
BUG: The 'Mail::Address' module is not here, but NO_PERL_CPAN_FALLBACKS was set!
需要安装perl,安装cmd如下:
sudo apt install libmailtools-perl
- 当提示SASL错误时,即如下错误提示:
Need MIME::Base64 and Authen::SASL todo auth at /usr/lib/git-core/git-send-email line 1565.
需要安装SASL,安装cmd如下:
sudo apt-get install libauthen-sasl-perl
- 当提示SSL错误时,即如下错误提示:
DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
注意,这个错误是debug级,只要保证前面几点都没有问题时,基本已经可以发送email出去了。
二、补丁准备并提交社区
我们不要盲目的直接把我们个性化的补丁提交到社区,对于补丁的生成以及commit的填写都有一定的要求。
通过如下例子进行说明:
- 补丁生成
// 添加修改
git add xxx/xxx/xxx
// 这里author是当git设置的user.email邮箱与公司邮箱不一致时需要设置,
// 一致时可以忽略,-s的作用是会在补丁末尾生成
// Signed-off-by: xxx <xxx@xxx.cn>
// 这里的xxx <xxx@xxx.cn>,也是使用git的user.name和user.email邮箱
git commit -s --author="xxx <xxx@xxx.cn>"
通过上面的cmd还只是在本地git上生成了补丁,还需要生成补丁文件:
// cmd会自动把当前的parent commit id打入到补丁文件最后
git format-patch --base=auto -1
// 如果是修改后重新提交,需要更换subject用以下cmd,注意需要替换X为1 ~ n
git format-patch --subject-prefix='PATCH vX' --base=auto -1
// 如修改了5次那么X为5,cmd如下:
git format-patch --subject-prefix='PATCH v5' --base=auto -1
- 补丁检查
确保没有格式或语法错误,最好做到0 errors, 0 warnings,可以适当对字符长度放宽要求,但决不能有error出现。
./scripts/checkpatch.pl --strict --max-line-length=80 000x-xxx.patch
- 测试发送
在正式发送前,先发送给自己的邮箱测试一下,如果对前面设置的git邮箱存在一些问题,可以检测一下看git是否能成功发送,当然熟练后可以省去这步。
git send-email --to xxx@xxx.com --cc xxx@xxx.com 0001-xxxx-xxx.patch
--cc:是抄送人邮箱
--to:是收件人邮箱
- 查找邮件maintainer
这步是准备向社区owner发送补丁了,需要确认你的补丁涉及那些maintainer,通过如下cmd确认:
./scripts/get_maintainer.pl 0001-xxxx.patch
- 提交补丁到社区
终于是发送补丁了,需要注意有人名的可以放在to,其他的放cc,当然这个可以不用遵守,全都放to都可以。
git send-email --to xxx@redhat.com --to xxx@kernel.org --cc xxx@vger.kernel.org --cc stable@vger.kernel.org … 0001-xxxx.patch
三、社区回复
在上面提交补丁后,往往不是一提交社区就会立马合入,而是会等kernel test robot完成编译,没有错误和警告的情况下,才会由owner的人员合入。
在此过程中,需要我们去修改并重新提交补丁。
- 在前面"补丁生成"的环节中,提到修改后的补丁需要修改subject;
- 在回复owner邮件时,如果想在同一个信封下发送邮件,就需要确认信件的Message-Id,在网页版网易邮箱内点开owner发的信件,点开上面"更多",点开"查看信头"里面会包含这份信件的Message-Id;
- 使用如下cmd进行回复:
git send-email --in-reply-to=xxx@xxx --to xxx@xxx xxx.txt
后面xxx.txt需要自行创建并写明回复的内容。
总结
以上就是今天的内容,本文仅仅简单介绍了第一次向社区发送补丁时,环境搭建、补丁生成以及补丁发送。

181

被折叠的 条评论
为什么被折叠?



