news 2026/9/10 5:58:06

Nextcloud Server 贡献代码时如何按 Conventional Commits 格式提交并用 git commit -s 完成 DCO 签署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nextcloud Server 贡献代码时如何按 Conventional Commits 格式提交并用 git commit -s 完成 DCO 签署

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:仓库列出的常见类型有featfixrefactortestdocschoreperfbuildci
  • scope:应与受影响的组件或 app 对应,例如files_sharingcoreencryption
  • 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.nameuser.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-assistantAssisted-byAI-Assisted-Bytrailer 时,给 PR 打上 "AI assisted" 标签;
  • 发现已知编程智能体邮箱(如noreply@anthropic.comcopilot@github.com等)或智能体名称出现在Signed-off-by中时,检查直接失败,要求你修改受影响的 commit,删除智能体的签署并改用Assisted-bytrailer。

原因在 AGENTS.md 中有明确说明:Signed-off-by代表 DCO 认证,只能由人类贡献者作出,AI 智能体不得添加。也就是说,即使 AI 工具帮你生成了代码,签署也必须由你本人以本人身份信息完成,同时在 PR 描述中声明使用了 AI 工具。

验证方式:CI 会拦截哪些提交

仓库内置的 CI 流程是格式合规性的最终校验,你可以在 PR 上直接观察结果:

  1. 格式拦截:block-unconventional-commits 工作流在 PR 的openedready_for_reviewreopenedsynchronize事件时运行 conventional commits 检查,不符合<type>(<scope>): <short description>结构的 commit 会被拦截,提交需要修正后重新推送。
  2. fixup 拦截:fixup 工作流会阻止 fixup 和 squash 类型的 commit 进入非 draft 状态的 PR,不要依赖 fixup 提交来"打补丁"。
  3. AI 签署拦截:如上所述,ai-policy 工作流在master/main分支的 PR 上失败,提示移除智能体签署、改用Assisted-by
  4. PR 模板自查项:PR 模板 的 Checklist 中有 "Sign-off message is added to all commits" 一项,要求所有 commit 都带签署;若 PR 包含 AI 生成内容,还需勾选 "AI (if applicable)" 部分。

提交前核对清单

推送 PR 前,对照以下各条逐项确认:

  • 每个 commit 的标题符合<type>(<scope>): <short description>,type 在featfixrefactortestdocschoreperfbuildci之内,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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 5:55:11

局域网监控软件怎么选?从分类到部署的完整选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:54:19

ruflo:用Rust构建轻量级流处理管道的实战指南

先交代一下背景&#xff1a;我最近在整理自己项目的实时数据管道时&#xff0c;接触到了 ruflo 这个开源项目&#xff0c;名字是 RU&#xff08;Rust&#xff09; FLO&#xff08;Flow&#xff09;的组合&#xff0c;直译过来就是用 Rust 写的流处理运行时。花了两周时间把手里…

作者头像 李华
网站建设 2026/9/10 5:52:11

affinidi-tdk-common实战:Python SDK公共基础库的架构与配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:49:02

minuet-ai.nvim 怎么配置 DeepSeek 实现 FIM 代码补全?

minuet-ai.nvim 怎么配置 DeepSeek 实现 FIM 代码补全&#xff1f; 【免费下载链接】awesome-deepseek-integration Integrate the DeepSeek API into popular software 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-integration 如果你的目标是…

作者头像 李华