签署行是什么
-s 选项会在提交信息末尾追加一行签署声明,写明作者姓名与邮箱。它是配合开发者原创声明使用的证书声明,用来确认提交者有权按项目许可证提交这段代码;合并、回退等操作同样可以带上这个选项。要注意的是,它加的是声明,不是密码学签名。
基本信息
| 语法 | git commit -s 或 git commit --signoff |
|---|---|
| 追加内容 | 一行签署声明,取自提交者姓名与邮箱 |
| 批量补签 | git rebase --signoff <基点>(Git 2.20 起) |
| 与加密签名区别 | 声明代码来源,不做密码学验证 |
| 身份来源 | 提交配置中的姓名与邮箱 |
典型使用场景
- 向采用开发者原创声明的开源项目提交代码
- 公司合规流程要求逐提交留痕
- 用交互式变基为历史提交批量补签署行
- 合并与回退提交同样需要声明来源时
- 定期核对某段提交是否都已带签署行
常用示例
常用示例
git commit -s -m 'docs: 更新贡献者名单' # 提交时追加签署行
git rebase --signoff origin/main # 给这一段提交批量补签署
git log --format='%h %(trailers:key=Signed-off-by)' -5 # 查看签署行
git config user.name; git config user.email # 核对签署使用的身份与加密签名对照
| 项 | 作用 | 注意事项 |
|---|---|---|
| 签署行 | 声明来源与授权 | 取自身份配置,需要真实信息 |
| 加密签名 | 验证提交未被篡改 | 需要密钥与签名配置 |
| 补签操作 | 为已有提交追加声明 | 会改写提交,哈希随之变化 |
签署行加的是证书声明,不是加密签名。需要密码学验证的场合要使用密钥签名提交,两者作用不同,也可以同时使用。
签署行里的姓名与邮箱来自提交身份配置,用昵称签署在合规场景下不一定被接受,贡献前先把身份配置成真实信息。
多人的提交汇入同一条历史时,每行的签署行各自对应提交者,不要统一替换成同一个身份,否则声明与实际来源不符。