你好 DCO,再见 CLA:简化对 Spring 的贡献

工程 | Rob Winch | 2025年1月6日 | ...

Spring 团队将推出简化的贡献流程,用 开发者原创证书(DCO) 取代签署 贡献者许可协议(CLA) 的要求。该流程将于本周从 Spring Framework、Spring Security 和 Spring Boot 开始,然后推广到整个 Spring 项目组合。

历史

长期以来,Spring 一直使用宽松的贡献者许可协议(CLA),以便为 Spring 项目、用户和 Spring 团队提供法律保护。长期的贡献者可能记得,签署 CLA 最初需要通过电子邮件发送已签名的 CLA PDF 文件。Spring 团队当时需要手动验证 CLA 已签署才能接受贡献。如果没有 GitHub Apps 等集成,当时这种手动过程在一定程度上是必要的。

为了简化该流程,我们创建了 CLA 的电子版本,该版本自动验证拉取请求的作者是否已签署 CLA。这相比手动流程是很大的改进,但它仍然存在缺点。

虽然电子 CLA 简化了贡献,但在为 Spring 贡献时,贡献者仍然面临障碍。CLA 是冗长的法律文件,可能难以理解。更重要的是,CLA 往往是定制的,因此理解它们的工作必须按项目进行。由于员工和雇主之间的法律要求,开发者经常需要与其雇主合作才能获得签署 CLA 的批准。所有这些因素都增加了向 Spring 贡献时的复杂性。

简化对 Spring 的贡献

为了进一步简化对 Spring 的贡献,我们决定转向使用开发者原创证书(DCO)。这仍然为 Spring 项目、用户和 Spring 团队提供了相同的保护。

DCO 的好处在于它易于阅读,并且是许多项目(包括 Linux 内核)的标准。完整的 DCO 可以概括为

  1. 我证明所提交的代码可以根据项目的开源许可(对于 Spring 而言是 Apache 2.0)提交
  2. 我理解我的贡献是公开的,并将无限期地重新分发

如何使用开发者原创证书

为了向项目贡献,您必须同意开发者原创证书。要确认您同意,您的提交信息底部必须包含一个 Signed-off-by 尾部标记。例如,它可能如下所示

A commit message

Closes gh-123

Signed-off-by: Rob Winch <[email protected]>

在指定提交信息时,可以使用 命令行选项 -s 或 –signoff 自动添加 Signed-off-by 尾部标记

git commit -s -m

如果您在 GitHub 中选择了 保持我的电子邮件地址私密选项,则 Signed-off-by 尾部标记可能如下所示

A commit message

Closes gh-123

Signed-off-by: Rob Winch <[email protected]>

常见问题解答

现有拉取请求怎么办?

对于已经通过 CLA 检查的现有拉取请求,无需签署 DCO。如果拉取请求尚未通过 CLA 检查,则应使用 DCO 流程。

何时开始迁移到使用 DCO?

Spring Framework、Spring Security 和 Spring Boot 项目将于本周(2025 年 1 月 6 日)迁移到此流程。经过成功的试运行期后,我们将迁移所有 Spring 项目以使用此流程。

执行哪些检查以确保遵循该流程?

Spring 使用 DCO GitHub App 添加检查,强制要求拉取请求中的所有提交都包含一个 Signed-off-by 尾部标记,其值是用户 GitHub 个人资料中的电子邮件和姓名。

如果您想了解该流程的样子,DCO 应用在其文档中描述了 流程如何工作,并附带了预期界面的截图。

如果 DCO 检查失败怎么办?

如果 DCO 检查失败,您可以点击失败检查旁边的“Details”链接,该链接将解释检查失败的原因以及如何修复。如果您忘记为单个提交添加 Signed-off-by 尾部标记,则可以使用以下命令进行添加

git rebase HEAD~1 --signoff
git push —-force-with-lease origin

如果一个提交有多个作者怎么办?

开发者原创证书 的条款 c 允许包含来自多个来源代码的提交包含单个 Signed-off-by 尾部标记。在这种情况下,包含 Signed-off-by 尾部标记表明提交作者证明他们有权根据项目许可提交该提交。

我可以使用 GitHub 的“建议更改”功能吗?

您可以在拉取请求上应用建议的更改

  1. 提出更改建议的人应在其建议更改的评论中包含 Signed-off-by
  2. 然后,应用更改的人(提交建议)在点击“签署并提交建议”按钮时将包含他们的 Signed-off-by 尾部标记(强制提交签署已启用),这表明他们同意开发者原创证书。

我可以修改别人的提交吗?

开发者原创证书 的条款 b 允许修改代码,但将您的更改(bug)归因于另一个人可能被认为是不礼貌的。因此,礼貌的做法是 在提交信息末尾插入一段包含您的电子邮件和姓名(用方括号括起来)的描述,后跟一个 Signed-off-by。例如

Signed-off-by: PR Developer <[email protected]>
[[email protected]: apply code conventions]
Signed-off-by: Committer Developer <[email protected]>

所有提交都需要包含 DCO 吗?

不。在下述某些情况下,我们可能会接受非常小的贡献,而无需 DCO。这适用于那些足够小的贡献(例如拼写错误、语法错误、打字错误、格式错误等),这些贡献不被您视为可独立保护的知识产权(即“明显的修复”)。此例外的目的是降低新贡献者的门槛,使其能够做出有益且必要的贡献,同时维护项目和社区的完整性。

愉快地贡献吧!

我们期待收到您更多简化的贡献!如果您有任何问题,请随时在我们的问题跟踪器中联系我们。

订阅 Spring 新闻通讯

订阅 Spring 新闻通讯,保持联系

订阅

领先一步

VMware 提供培训和认证,助您飞速进步。

了解更多

获得支持

Tanzu Spring 通过一个简单的订阅提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区所有即将到来的活动。

查看全部