First Patch to Linux Kernel
Linux Kernel是地球最大的开源项目之一, 使用电子邮件工作流接受贡献.
推荐阅读Outreachyfirstpatch, 指导创建第一个Linux Kernel补丁. 官方文档查看Submitting patches.
Kernel Tree
Linux Kernel项目有许多代码仓库, 称之为树. 不同的子系统或功能在不同的子树中开发, 最终由Linus Torvalds将各个子树的补丁合并到mainline仓库.
Coding Style
Linux Kernel有严格的编码风格要求, 细节查看Linux kernel coding style. 违反编码风格的补丁会被维护者拒绝.
提交补丁前使用scripts/checkpatch.pl
脚本检查编码风格, 如果违反编码风格的代码看起来更好, 那么最好保持原样, 常见的噪音查看CheckpatchTips.
Email Workflow
Linux Kernel使用电子邮件工作流, 补丁通过电子邮件发送给维护者, 维护者审查通过后合并到子树. 使用scripts/get_maintainer.pl
脚本通过commit或文件查询维护者的邮件地址和相关邮件列表.
推荐使用git send-email
发送补丁, sourcehut创建了基于此的电子邮件工作流教程git-send-email.
Patch Philosophy
Linux Kernel对补丁有严格的格式要求, 细节查看PatchPhilosophy.
下面是使用git format-patch
生成的补丁示例:
From d446483f4cbfc8f89973fc2aea1f2e7351d73c43 Mon Sep 17 00:00:00 2001
From: Xingquan Liu <b1n@b1n.io>
Date: Fri, 30 May 2025 13:08:53 -0400
Subject: [PATCH] ...
[1]
Signed-off-by: Xingquan Liu <b1n@b1n.io>
---
[2]
test | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
diff --git a/test b/test
new file mode 100644
index 000000000000..e69de29bb2d1
Subject: [PATCH] ...
是从补丁主题自动生成的邮件主题, 一般不直接修改, 而是使用git commit --amend
修改commit, 并重新生成补丁. 补丁主题也有严格的格式要求, 细节查看Patch subject formatting. Signed-off-by: ...
是一个补丁标签, 证明代码符合Developer Certificate of Origin, 详细解释查看PatchTipsAndTricks. 可以通过git config format.signOff yes
命令启用自动补丁签署. 邮件主题下方[1]处是补丁描述. ---
下方[2]处可以添加注释, 应用补丁时被忽略.
维护者审查补丁后, 可能会要求修改, 修改后再次生成补丁应使用git format-patch -v2
命令. -v2
参数会在邮件主题中添加版本号: Subject: [PATCH v2] ...
. 还需要在[2]处添加补丁版本说明:
Signed-off-by: Xingquan Liu <b1n@b1n.io>
---
v2:
- Made commit message more clear
- Corrected grammer in code comment
- Used new API instead of depreciated API
test | 0
一系列相关的补丁合并为补丁集提交, 可以使用git format-patch --cover-letter
命令, 将注释写在单独的文件中.
Reply Email
提交补丁后, 可能会需要一些讨论, 以确定最终方案, 开发者需要回复电子邮件参与讨论. Linux Kernel要求邮件是内联的纯文本格式, 禁用format=flowed, 自动换行和GPG签名, 并使用UTF-8编码. 推荐使用NeoMutt电子邮件客户端, 其他被认为纯文本支持良好的电子邮件客户端查看Use plain text email. 引用原始邮件内容时使用内联回复.