首页/开发/Git 与协作速查/DCO:开发者原创声明
协作与代码评审75 条

DCO:开发者原创声明

DCO(Developer Certificate of Origin)要求每次提交带 Signed-off-by 声明有权提交该代码;许多开源项目用机器人校验,缺失或信息不符会拒绝合入。

Git 与协作速查开发更新于 2026-10-13

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 可以并存:前者面向每个提交的来源声明,后者面向贡献者与项目之间的法律关系。具体要求以目标项目的贡献指南为准。

易错点

  • 忘了 -s 的提交需要逐个补签,提交较多时用交互式 rebase 批量处理更省事
  • 邮箱拼写错误或使用项目不认可的身份,机器人判定不一致会拒绝合入
  • 补签属于改写历史,对已有他人工作在其上的公共分支强推会造成别人提交丢失
  • 只给最新提交签名而早前提交仍缺失,机器人按提交逐个校验,整体依然不通过

数据来源与参考

  • Developer Certificate of Origin 1.1(developercertificate.org)
  • Git 官方文档:git-commit(-s/--signoff)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌