DCO 是什么
DCO(Developer Certificate of Origin,开发者原创声明)是一份声明:提交者确认自己有权按项目的许可证提交这段代码。落到操作上,就是每个提交信息的末尾带一行 Signed-off-by,写明姓名与邮箱。不少开源项目用机器人逐个提交校验,缺这行或信息与提交者不符时会直接拒绝合入。
基本信息
| 声明方式 | git commit -s,在提交信息末尾追加 Signed-off-by |
|---|---|
| 校验方式 | 项目用 DCO 机器人检查每个提交的 trailer |
| 与 CLA 区别 | DCO 是逐提交声明,CLA 是签署一份法律协议 |
| 补签方式 | 改写历史:交互式 rebase 或 amend 后推送 |
| 一致要求 | 姓名与邮箱需与项目约定一致 |
典型使用场景
- 向采用 DCO 的开源项目提交补丁,必须逐提交带签名
- 企业合规流程要求留痕,确认代码来源清晰可追溯
- 多人共同完成的提交需要各自署名(配合共同作者标记)
- 机器人报告缺少签名时,用交互式 rebase 批量补签
- 接手他人分支继续开发时,检查是否所有提交都已签名
常用示例
常用示例
git commit -s -m 'fix(api): 修正分页边界' # -s 自动追加 Signed-off-by
git log -1 --format=%B | tail -n 3 # 查看提交末尾的签名行
git config user.name; git config user.email # 核对签名使用的身份
git rebase -i HEAD~3 --signoff # 给最近三个提交补签
git push --force-with-lease origin feature/login # 改写历史后安全推送核对要点
| 检查项 | 正常表现 | 异常表现 |
|---|---|---|
| 签名行 | 每个提交末尾都有 Signed-off-by | 机器人报告缺少签名 |
| 姓名邮箱 | 与项目要求的身份一致 | 与作者身份不符被拒 |
| 提交范围 | PR 内全部提交都已签名 | 只有部分提交带签名 |
补签会改写提交哈希,属于历史重写,只能对尚未合入、且没有他人在其基础上开发的自己分支执行,推送时用 --force-with-lease 避免覆盖他人提交。
DCO 与 CLA 可以并存:前者面向每个提交的来源声明,后者面向贡献者与项目之间的法律关系。具体要求以目标项目的贡献指南为准。