Nextcloud Server 贡献代码时如何按 Conventional Commits 格式提交并用 git commit -s 完成 DCO 签署
【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server
向 Nextcloud Server 仓库提交代码时,每一个 commit 都要满足两条硬性要求:提交信息遵循 Conventional Commits 格式,并且带有 DCO(Developer Certificate of Origin)签署。仓库的 贡献指南 要求使用 Conventional Commits 来保持项目内变更的一致性和可自动化;DCO 则作为额外保障,确认贡献者有权将其贡献以项目许可证授权。本文给出从配置、提交到 CI 校验的完整操作路径。
Conventional Commits 的格式要求
仓库要求的提交信息结构如下(来自 AGENTS.md):
<type>(<scope>): <short description> [optional body]各部分的约束:
type:仓库列出的常见类型有feat、fix、refactor、test、docs、chore、perf、build、ci;scope:应与受影响的组件或 app 对应,例如files_sharing、core、encryption;short description:对本次变更的简短描述。
贡献指南 给出的示例:
feat(files_sharing): allow sharing with contacts如果你的提交含有 AI 辅助生成的内容,还需要在 commit message 中加入Assisted-bytrailer,格式为Assisted-by: AGENT_NAME:MODEL_VERSION,完整示例(文档示例):
feat(files_sharing): allow sharing with contacts Assisted-by: ClaudeCode:claude-sonnet-4-6配置签名信息并用 git commit -s 签署
DCO 签署就是一行 trailer,追加到每个 commit message 中(贡献指南 中的文档示例):
Signed-off-by: Random J Developer <random@developer.example.org>这里需要替换为你的真实姓名和邮箱——文档明确要求使用真实姓名,不接受化名或匿名贡献。配置好 git 的user.name和user.email后,可以用git commit -s自动完成签署:
git config user.name "你的真实姓名" git config user.email "你的真实邮箱" git commit -s前两条命令中的值必须换成你的真实身份信息,这是Signed-off-by中实际写入的内容。文档还提供了一个可选的快捷方式:通过 git alias 让每次提交默认带-s:
git config --global alias.ci 'commit -s'配置后用git ci提交即可自动签署。注意这条命令带--global,修改的是当前用户的全局 git 配置,如果机器上还有其他仓库不想默认签署,可省略--global只在仓库内配置。
签署时你确认了什么
签署前应先阅读 contribute/developer-certificate-of-origin(DCO 1.1)。执行git commit -s相当于逐条声明:
- (a) 贡献由你全部或部分原创,且你有权按文件中标明的开源许可证提交;
- (b) 贡献基于你知晓受合适开源许可证保护的前人工作,且你有权在相同(或允许的另一种)许可证下提交;
- (c) 贡献由他人直接提供、由该人完成了 (a)/(b)/(c) 认证、且你未做修改;
- (d) 你理解本项目与贡献均为公开,贡献记录(包括你随贡献提交的全部个人信息和签名)将被永久保存,并可能按项目或涉及的开源许可证再分发。
AI 辅助提交的边界:谁可以添加 Signed-off-by
如果提交过程中使用了 AI 工具,仓库的 AI 政策检查流程 会检查 PR 中所有 commit message:
- 发现
AI-assistant、Assisted-by或AI-Assisted-Bytrailer 时,给 PR 打上 "AI assisted" 标签; - 发现已知编程智能体邮箱(如
noreply@anthropic.com、copilot@github.com等)或智能体名称出现在Signed-off-by中时,检查直接失败,要求你修改受影响的 commit,删除智能体的签署并改用Assisted-bytrailer。
原因在 AGENTS.md 中有明确说明:Signed-off-by代表 DCO 认证,只能由人类贡献者作出,AI 智能体不得添加。也就是说,即使 AI 工具帮你生成了代码,签署也必须由你本人以本人身份信息完成,同时在 PR 描述中声明使用了 AI 工具。
验证方式:CI 会拦截哪些提交
仓库内置的 CI 流程是格式合规性的最终校验,你可以在 PR 上直接观察结果:
- 格式拦截:block-unconventional-commits 工作流在 PR 的
opened、ready_for_review、reopened、synchronize事件时运行 conventional commits 检查,不符合<type>(<scope>): <short description>结构的 commit 会被拦截,提交需要修正后重新推送。 - fixup 拦截:fixup 工作流会阻止 fixup 和 squash 类型的 commit 进入非 draft 状态的 PR,不要依赖 fixup 提交来"打补丁"。
- AI 签署拦截:如上所述,ai-policy 工作流在
master/main分支的 PR 上失败,提示移除智能体签署、改用Assisted-by。 - PR 模板自查项:PR 模板 的 Checklist 中有 "Sign-off message is added to all commits" 一项,要求所有 commit 都带签署;若 PR 包含 AI 生成内容,还需勾选 "AI (if applicable)" 部分。
提交前核对清单
推送 PR 前,对照以下各条逐项确认:
- 每个 commit 的标题符合
<type>(<scope>): <short description>,type 在feat、fix、refactor、test、docs、chore、perf、build、ci之内,scope 与受影响的组件一致; - 每个 commit 都带
Signed-off-by: 真实姓名 <真实邮箱>,且姓名邮箱与你配置的user.name/user.email一致; - AI 辅助内容只出现在
Assisted-bytrailer 中,Signed-off-by里没有智能体身份信息; - 没有
fixup!或squash!前缀的 commit; - PR 描述中按 PR 模板 完成 Summary、Checklist,并在适用时声明 AI 工具使用情况。
满足以上条件后推送 PR,上述工作流全部通过即为格式与签署合规。如果某个组件的问题不属于 server 仓库(本仓库覆盖 Nextcloud server 核心及 files、encryption、external storage、sharing 等内置 app),应到对应组件的仓库提交。
【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考