第一次向linux社区提交补丁


前言

  从事linux开发的人经过会遇到一些奇奇怪怪的bug,在修复后,需要提交给linux社区合入,从此也是linux贡献人了呀。
  还记得第一次提交社区补丁时,啥也不懂,用git怎么提交呀?提交给谁呀?提交后社区回复,如果要修改又该如何在修正后添加那些信息进行提交?


一、git和邮箱准备工作

  如果你的linux系统是第一次提交,那么有可能会出现很多问题。

邮箱环境

  本人使用的是网易邮箱,当然其他的邮箱也可以。

  1. 邮箱需要开启IMAP/SMTP和POP3/SMTP服务;
    登录网页版网易邮箱https://email.163.com/后,点击最上方设置,点击进入"POP3/SMTP/IMAP",开启
    IMAP/SMTP服务或POP3/SMTP服务,第一次开启会需要通过手机扫码验证发送短信后,获得一串"授权密码",这串授权密码很重要,而且只会出现一次,一定要保存好
    如果不记得了可以在下方"授权密码管理"点击删除,然后点击"新增授权密码",重新获得一个新的密码。

  2. 给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的操作系统,第一提交时遇到的如下几个问题:

  1. git没有send-email的指令,需要安装git-email指令如下:

sudo apt-get install git-email

 安装后,你就能使用git send-email的cmd了

  1. email需要用到perl,如果有如下错误提示:
    BUG: The 'Mail::Address' module is not here, but NO_PERL_CPAN_FALLBACKS was set!
    需要安装perl,安装cmd如下:

sudo apt install libmailtools-perl

  1. 当提示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

  1. 当提示SSL错误时,即如下错误提示:
    DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
    注意,这个错误是debug级,只要保证前面几点都没有问题时,基本已经可以发送email出去了。

二、补丁准备并提交社区

  我们不要盲目的直接把我们个性化的补丁提交到社区,对于补丁的生成以及commit的填写都有一定的要求。
  通过如下例子进行说明:

  1. 补丁生成
// 添加修改
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
  1. 补丁检查
    确保没有格式或语法错误,最好做到0 errors, 0 warnings,可以适当对字符长度放宽要求,但决不能有error出现。

./scripts/checkpatch.pl --strict --max-line-length=80 000x-xxx.patch

  1. 测试发送
    在正式发送前,先发送给自己的邮箱测试一下,如果对前面设置的git邮箱存在一些问题,可以检测一下看git是否能成功发送,当然熟练后可以省去这步。

git send-email --to xxx@xxx.com --cc xxx@xxx.com 0001-xxxx-xxx.patch

--cc:是抄送人邮箱
--to:是收件人邮箱

  1. 查找邮件maintainer
    这步是准备向社区owner发送补丁了,需要确认你的补丁涉及那些maintainer,通过如下cmd确认:

./scripts/get_maintainer.pl 0001-xxxx.patch

  1. 提交补丁到社区
    终于是发送补丁了,需要注意有人名的可以放在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的人员合入。
  在此过程中,需要我们去修改并重新提交补丁。

  1. 在前面"补丁生成"的环节中,提到修改后的补丁需要修改subject;
  2. 在回复owner邮件时,如果想在同一个信封下发送邮件,就需要确认信件的Message-Id,在网页版网易邮箱内点开owner发的信件,点开上面"更多",点开"查看信头"里面会包含这份信件的Message-Id;
  3. 使用如下cmd进行回复:

git send-email --in-reply-to=xxx@xxx --to xxx@xxx xxx.txt

 后面xxx.txt需要自行创建并写明回复的内容。


总结

  以上就是今天的内容,本文仅仅简单介绍了第一次向社区发送补丁时,环境搭建、补丁生成以及补丁发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持不秃0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值