领先一步
VMware 提供培训和认证,助您加速进步。
了解更多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的贡献流程,我们决定转向使用开发者原创证书(DCO)。这仍然为Spring项目、用户和Spring团队提供了相同的保护。
这样做的好处是开发者原创证书(DCO)易于阅读,并且是包括Linux内核在内的许多项目的标准。 整个DCO可以概括为:
为了贡献项目,您必须同意开发者原创证书。要确认您同意,您的提交消息底部必须包含一个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流程。
Spring Framework、Spring Security和Spring Boot项目将于本周(2025年1月6日)开始过渡到此流程。在成功的试用期后,我们将所有Spring项目迁移到使用此流程。
Spring使用DCO GitHub App添加一个检查,强制要求拉取请求中的所有提交都包含一个Signed-off-by附注,其值与用户GitHub个人资料中的电子邮件和姓名一致。
如果您想了解该流程的实际情况,DCO应用程序描述了该流程的工作原理,并附带了预期的屏幕截图。
如果DCO检查失败,您可以点击失败检查旁边的“详细信息”链接,它会解释检查失败的原因以及如何解决。如果您忘记为单个提交添加Signed-off-by附注,则可以使用以下命令添加:
git rebase HEAD~1 --signoff
git push —-force-with-lease origin
开发者原创证书的条款c允许包含来自多个来源代码的提交包含单个Signed-off-by附注。在这种情况下,包含Signed-off-by附注表示提交作者证明他们有权根据项目的许可证提交该提交。
您可以应用拉取请求上的建议更改。
开发者原创证书条款b允许修改代码,但将您的更改(错误)归因于他人可能被视为不礼貌。因此,被认为礼貌的做法是在提交消息的末尾插入一个用方括号括起来的带有您的电子邮件和姓名的描述,后跟一个Signed-off-by。例如:
Signed-off-by: PR Developer <[email protected]>
[[email protected]: apply code conventions]
Signed-off-by: Committer Developer <[email protected]>
不需要。在下述某些情况下,我们可能会接受非常小的贡献,而无需DCO。这旨在针对那些足够小(例如拼写错误、语法错误、印刷错误、格式错误等),以至于您不认为它们是独立可保护的知识产权(“明显修复”)的贡献。此例外旨在降低新贡献者的门槛,使其能够做出有益且必要的贡献,同时保持项目的完整性和我们社区的团结。
我们期待看到您更多且更简化的贡献!如果您有任何问题,请随时在我们的问题跟踪器中联系我们。