如何向开源社区奉献代码

从事嵌入式工作, 日常就是与u-boot, linux这些开源代码打交道, 将自己的代码提交到主线, 将是一件快乐而又能提升逼格的事情. 有些比较新的代码会使用github进行bug追踪, pr合并, 这些直接在github提交Pull Request就好了, 比较简单, 就不在赘述. 本文重点介绍如何使用mail list的方式提交自己的代码, 以u-boot为例介绍.

一: 新建分支, 实现功能

当需要实现一个feature或者修改一个bug, 我们需要从master上面切换一个分支:

$ git checkout -b allwinner-r40-usb-otg-v2

之后在当前分支上对主线代码进行修改, 不要将所有的修改都提交到一个commit上面, 而是应该将修改拆分成几个独立的commit, 这样也便于审核和维护. 在commit之前需要配置git的邮箱等信息:

$ git config --global user.name name
$ git config --global user.email xxx@xxx.com

配置完成之后, 可以使用git config --list检查下是否已经设置成功.

开源的代码对commit都有一个约定俗成的三段式写法, 第一段简要写明当前commit修改的主要内容. 第二段可以详细的描述下为什么这么做等等原因. 第三段签上自己Signed-off-by. 下面是u-boot代码中的一个例子:

arm: mvebu: turris_mox: add support for board rescue modeAdd necessary config options and board code to support board factory
reset / rescue mode on Turris MOX.In order to also support invoking rescue mode from U-Boot console,
without having to press the factory reset button, put the rescue command
into `bootcmd_rescue` default environment variable. When factory reset
button is pressed, invoke rescue mode via distroboot by setting
`boot_targets` to `rescue`.Rescue boot from console can be invoked by runningrun bootcmd_rescueSigned-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>

当然, 每次commit都写一个Signed-off-by很费劲, 因此git有选项可以配置一个commit的模板文件, 在每次commit的时候自动填充一些信息:

➜  u-boot git:(allwinner-r40-usb-otg-v2) git config --list | grep commit.template
commit.template=/home/qianfan/.git-commit-template.txt
➜  u-boot git:(allwinner-r40-usb-otg-v2) cat ~/.git-commit-template.txtSigned-off-by: qianfan Zhao <qianfanguijin@163.com>➜  u-boot git:(allwinner-r40-usb-otg-v2)
二: 生成, 检查patch

新建一个outgoing文件夹, 将当前的修改输出到patch文件中.

➜  u-boot git:(allwinner-r40-usb-otg-v2) git format-patch master -o outgoing
outgoing/0001-phy-sun4i-usb-Fix-sun8i_r40_cfg.patch
outgoing/0002-dts-bpi-m2u-Enable-USB_OTG-by-default.patch
outgoing/0003-sunxi-defconfig-bpi-m2u-Enable-usb-gadget-and-ums-by.patch

u-boot的源码中有checkpatch.pl程序, 可以对patch的格式进行检查, 在提交之前一定要检查下patch:

➜  u-boot git:(allwinner-r40-usb-otg-v2) ./scripts/checkpatch.pl outgoing/*.patch
---------------------------------------------------
outgoing/0001-phy-sun4i-usb-Fix-sun8i_r40_cfg.patch
---------------------------------------------------
total: 0 errors, 0 warnings, 0 checks, 8 lines checkedoutgoing/0001-phy-sun4i-usb-Fix-sun8i_r40_cfg.patch has no obvious style problems and is ready for submission.
---------------------------------------------------------
outgoing/0002-dts-bpi-m2u-Enable-USB_OTG-by-default.patch
---------------------------------------------------------
total: 0 errors, 0 warnings, 0 checks, 31 lines checkedoutgoing/0002-dts-bpi-m2u-Enable-USB_OTG-by-default.patch has no obvious style problems and is ready for submission.
------------------------------------------------------------------------
outgoing/0003-sunxi-defconfig-bpi-m2u-Enable-usb-gadget-and-ums-by.patch
------------------------------------------------------------------------
total: 0 errors, 0 warnings, 0 checks, 16 lines checkedoutgoing/0003-sunxi-defconfig-bpi-m2u-Enable-usb-gadget-and-ums-by.patch has no obvious style problems and is ready for submission.NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO ENOSYS MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE NETWORKING_BLOCK_COMMENT_STYLE PREFER_ETHER_ADDR_COPY USLEEP_RANGE
三: 发送patch

对u-boot而言, 需要将patch发送到maling list: u-boot@lists.denx.de, 同时需要通知相关的维护者. 有时候, 我们也不知道谁是这份代码的维护者, 也不知道应该通知谁. 还好, 有工具可以获取某些patch的维护者:

➜  u-boot git:(allwinner-r40-usb-otg-v2) ./scripts/get_maintainer.pl outgoing/*.patch
Chen-Yu Tsai <wens@csie.org> (maintainer:BANANAPI M2 ULTRA BOARD)
Jagan Teki <jagan@amarulasolutions.com> (maintainer:ARM SUNXI)
Andre Przywara <andre.przywara@arm.com> (maintainer:ARM SUNXI,commit_signer:4/3=100%)
Ivan Uvarov <i.uvarov@cognitivepilot.com> (commit_signer:2/3=67%,authored:2/3=67%,added_lines:688/702=98%,removed_lines:62/62=100%)
qianfan Zhao <qianfanguijin@163.com> (commit_signer:1/3=33%,authored:1/3=33%)
u-boot@lists.denx.de (open list)

按照mailing list的要求, 发送的patch不能有乱七八糟的格式, 就是纯文本, 所以不能用添加附件的方式来发送. 为此, 开源社区的大佬们做了一个git send-email的程序. 如果未安装的话, 可以使用apt安装.

# apt install git-email

安装之后, 需要配置邮箱smtp地址, 账号, 密码等. 下面是我使用的网易邮箱的配置. sendemail.smtppass是邮箱密码的明文.

sendemail.smtpserver=smtp.163.com
sendemail.smtpuser=xxx@xxx.com
sendemail.smtppass=your_email_passwd
sendemail.from=xxx@xxx.com
sendemail.smtpencryption=tls

配置好账号信息之后, 就可以使用send-email发送patch了. 可以将上面得到的维护者的邮箱全部填上:

➜  u-boot git:(allwinner-r40-usb-otg-v2) git send-email outgoing/*.patch -to u-boot@lists.denx.de -cc wens@csie.org -cc jagan@amarulasolutions.com -cc andre.przywara@arm.com -cc marex@denx.de --smtp-debug

待发送完成之后, 可以在patchwork上面找到这个提交: http://patchwork.ozlabs.org/project/uboot/patch/20210616023326.18135-1-qianfanguijin@163.com/

四: 审核意见

当patch发送出去之后, 一般而言并不能直接合并入master, 主线代码维护者会对patch进行审核, 并回复. 回复的信息会发送到邮箱中. 后续可以在使用邮件进行沟通. 邮箱客户端推荐使用Mozilla Thunderbird.

对审核的建议作出修改, 需要使用git rebase回退到某一个commit修改, 全部修改完成之后, 生成patch, 重复send-email的工作即可.


感谢完成阅读,我是喜欢打篮球的写代码的篮球球痴,这个是我的公众号,感谢你关注并支持。我从大学开始接触电子和嵌入式软件知识,至今,已经毕业工作了9年,我喜欢嵌入式,也愿意从事这个行业。不管是从技术还是职场经验,都积累了足够多的经验,目前在一个非常优秀的团队中做开发工作。

很高兴认识每一个对技术努力,对人用心的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题(53)—— 评价代码片段

评价下面代码片段&#xff1a; unsigned int zero 0; unsigned int compzero 0xFFFF; /*1s complement of zero */ 对于一个int型不是16位的处理器为说&#xff0c;上面的代码是不正确的。应编写如下&#xff1a; unsigned int compzero ~0; 这一问题真正能揭露出应试者是…

TCP三次握手及四次挥手详解

此篇文章转载自&#xff1a;http://justim.blog.51cto.com/740099/237548TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议&#xff0c;提供可靠的连接服务&#xff0c;采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchron…

zxing二维码的生成与解码(C#)

ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括&#xff1a;J2ME、J2SE和Android。 首先&#xff0c;在其官网http://code.google.com/p/zxing/上去下载源码 编译在其cshar…

STM32项目(一) —— 展示车座椅

STM32项目&#xff08;一&#xff09; —— 展示车座椅 宗旨&#xff1a;技术的分享是有限的&#xff0c;分享的精神是无限的。功能&#xff1a;模拟人开车时&#xff0c;ACR和ABL的变化。 主控制器&#xff1a;STM32&#xff08;CAN&#xff0c;串口&#xff0c;网口&#xff…

一文读懂 | CPU负载均衡实现

在《一文读懂 | 进程怎么绑定 CPU》这篇文章中介绍过&#xff0c;在 Linux 内核中会为每个 CPU 创建一个可运行进程队列&#xff0c;由于每个 CPU 都拥有一个可运行进程队列&#xff0c;那么就有可能会出现每个可运行进程队列之间的进程数不一样的问题&#xff0c;这就是所谓的…

NA-NP-IE系列实验28:HDLC 和PPP 封装

实验28:HDLC 和PPP 封装<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1. 实验目的通过本实验&#xff0c;读者可以掌握如下技能&#xff1a;&#xff08;1&#xff09; 串行链路上的封装概念&#xff08;2&#xff09; HDLC 封…

使用git提交到github,每次都要输入用户名和密码的解决方法

使用git提交文件到github,每次都要输入用户名和密码&#xff0c;操作起来很麻烦&#xff0c;以下方法可解决&#xff0c;记录以下。 原因&#xff1a;在clone 项目的时候&#xff0c;使用了 https方式&#xff0c;而不是ssh方式。 默认clone 方式是&#xff1a;https 切换到&am…

回家一趟

大家好&#xff0c;我是写代码的篮球球痴。最近休年假回了一趟家里&#xff0c;决定回来也比较仓促&#xff0c;那天在公司的36楼发呆&#xff0c;觉得心里有点东西&#xff0c;然后就特别想回家看看。从晚上8&#xff1a;30出发&#xff0c;到第二天的中午&#xff0c;我从广东…

STM32项目(二) —— 车灯测试台架

STM32 —— 车灯测试台架 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 需求&#xff1a; &#xff08;1&#xff09;、点灯控制器&#xff1a;在线节拍&#xff0c;离线节拍&#xff1b; &#xff08;2&#xff09;、PWM控制盒&#xff1a;在线PWM&…

Spring MVC 使用介绍(二)—— DispatcherServlet

一、Hello World示例 1、引入依赖 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope> </dependency> <dependency&g…

单片机如何检测市电通断?(应用甚广~)

我们在topemic网站上分享过一篇题为"单片机检测220V交流电通断电路"的文章&#xff0c;目前有近万次阅读&#xff0c;在这里做个总结分享给没有读过该文的公众号朋友。废话不多说&#xff0c;直接上图&#xff1a;该电路工作原理如下&#xff1a;当220V断开时&#x…

STM32项目(三)——通用LIN控制器

STM32——通用LIN控制器 宗旨&#xff1a;技术的分享是有限的&#xff0c;分享的精神是无限的。 需求&#xff1a; LIN马达控制器&#xff1a;AFS&#xff08;DHLAFL&#xff09;——弯道辅助照明系统 DHL&#xff1a;上极限&#xff0c;下极限&#xff0c;零位&#xff0c;马…

精妙的SQL语句收藏

说明&#xff1a;复制表(只复制结构,源表名&#xff1a;a 新表名&#xff1a;b)select * into b from a where 1<>1说明&#xff1a;拷贝表(拷贝数据,源表名&#xff1a;a 目标表名&#xff1a;b)insert into b(a, b, c) select d,e,f from b;说明&#xff1a;日程安排提…

hihoCoder #1758 加减

$\DeclareMathOperator{\lowbit}{lowbit}$ 题目大意 对于一个数 $x$&#xff0c;设它最低位的 1 是第 $i$ 位&#xff0c;则 $\lowbit(x)2i$ 。 例如 $\lowbit(5)1$&#xff0c;$\lowbit(12)4$ 。 定义对 $x$的一次变换为&#xff1a;有 50% 的概率变成 $x\lowbit(x)$&#xff…

十年经验工程师为何被裁?

事件去年年底&#xff0c;公司来了一位工作十余年的工程师&#xff0c;据说软件硬件都会&#xff0c;应聘的岗位是XX算法工程师。比较巧的是&#xff0c;这位工程师是我上一家公司隔壁部门的同事。我们均来自大厂&#xff0c;但是是国企&#xff0c;二线城市。所以尽管他在前公…

飞康CEO:敢于向传统的灾备法则说“不”

近日&#xff0c;借美国飞康软件公司创办人兼首席执行官胡艾瑞徵先生访华期间&#xff0c;比特网记者对其进行了独家专访。 飞康软件公司成立于2000年&#xff0c;在过去的9年中&#xff0c; IPStor已经发展成为飞康包括整合重复数据删除功能的虚拟磁带库(VTL)、持续数据保护(C…

STM32项目(四)——暗室网关

STM32项目&#xff08;四&#xff09;——暗室网关 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 需求&#xff1a; 采集环境箱温度&#xff0c;采集20个通道的电流值&#xff0c;点灯节拍控制&#xff1b;&#xff08;上位机服务器端复杂&#xff09…

做10多年测试的老何

题图&#xff1a;老何是我的同事&#xff0c;他也喜欢篮球&#xff0c;因为篮球&#xff0c;我们两的话题比较多。老何做了十几年的测试工作。我们比较有猿粪的是&#xff0c;12年我在TCL&#xff0c;当时他也在TCL工业研究院&#xff0c;我们两的办公室也就相邻两栋楼。不过那…

[紧急问题和解决方案] 无法打开被权限管理服务(RMS)加密的Office 2003文档

在2009年12月11号以后&#xff0c;我们发现了关于“无法打开被‘权限管理服务’&#xff08;RMS&#xff09;加密的Office 2003文档”的紧急问题。为了避免对您的业务任何可能的影响&#xff0c;特提前向您介绍症状和解决方案如下&#xff1a;<?xml:namespace prefix o ns…

STM32项目(五)——智能回收箱

智能回收箱 智能回收箱功能&#xff1a; 智能废旧回收箱定位&#xff08;GPRS/GPS&#xff09;。 回收箱异常开门报警、重量超限报警、容量超限报警&#xff0c;电量低下报警等&#xff08;信息/邮件&#xff09;。 废旧物品投递时先刷卡&#xff0c;显示卡号等信息确认无误后可…