Git中的Sign Offfunction是什么?

Git中的Sign Offfunction有什么意义?

git commit --signoff 

我应该什么时候使用它,如果有的话?

注销是将补丁程序joinLinux内核和其他一些项目的必要条件,但大多数项目并没有真正使用它。

它是在上海合作组织诉讼之后引入的(和其他一些上海合作组织的侵权指控 ,其中大多数他们从未实际上诉),作为开发者原产地证书 。 用来表示您certificate您已经创build了相应的补丁程序,或者您已经证实,尽我所知,它是在适当的开放源代码许可证下创build的,或者是由某人提供给您的否则根据这些条款。 这可以帮助build立负责所涉代码的版权状态的人员链,以帮助确保不在适当的免费软件(开源)许可下发布的版权代码不包括在内核中。

签名是在提交消息结束处的一行,用于certificate提交作者是谁。 它的主要目的是提高跟踪谁做了什么,特别是补丁。

例:

 Made an update to xyz. Signed-off-by: Super Developer <super.dev@gmail.com> 

如果用于开源项目,它应该包含用户的真实姓名。

如果分支机构维护人员需要稍微修改补丁以合并补丁,他可以要求提交者重新提交,但这样做会适得其反。 他可以调整代码并在最后签名,所以作者仍然可以获得补丁而不是引入的错误。

 Made an update to xyz. Signed-off-by: Super Developer <super.dev@gmail.com> [uber.dev@gmail.com: renamed methods according to naming conventions.] Signed-off-by: Uber Developer <uber.dev@gmail.com> 

资料来源: http : //gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html

git 2.7.1(2016年2月)阐明了在David A. Wheeler( david-a-wheeler )的 提交b2c150d (2016年1月5日)中 。
(合并由Junio C gitstergitster -在提交7aae9ba ,2016年2月5日)

git commit man page现在包括:

 -s:: --signoff:: 

在提交日志消息的末尾添加Signed-off-by行。
签名的含义取决于项目,但它通常certificate提交者有权根据相同的许可证提交此项工作,并同意开发者原始证书 (参见http://developercertificate.org/以获取更多信息)。;


展开描述--signoff文档

修改各种文档(手册页)文件来更详细地解释什么--signoff意思。

这是由“ Lwn文章'Bottomley:对DCO的一个温和的build议 ”(开发者原产地证书)的启发,paulj指出:

我与DCO的问题是, 为git commit添加一个“ -s ”参数并不意味着你甚至听说过DCOgit commit man page没有提到DCO在任何地方 ),没关系实际上看过它。

那么,如何以“ signed-off-by ”的方式暗示发件人同意并向DCO作出承诺呢? 结合事实,我已经看到在没有SOB的补丁名单上的答复,只是说“重新发送这个signed-off-by所以我可以提交”。

扩展git的文档可以让开发人员更容易理解--signoff在使用时会--signoffclosures。


请注意,此签名现在(对于Git 2.15.x / 2.16,Q1 2018)也适用于git pull

参见W. Trevor King( wking )的 commit 3a4d2c7 (2017年10月12日) 。
(由Junio C gitster合并- gitster – in commit fb4cd88 ,2017年11月6日)

pull :通过 – --signoff/--no-signoff到“ git merge

合并可以--signoff ,但是不能通过 – --signoff ,使用不方便; 允许“ pull ”选项并通过它。

在这个问题上有一些很好的答案。 我会试着增加一个更广泛的答案,即在目前的实践中,这些线/标题/预告片是关于什么的。 不是特别的签字头(不是唯一的)。

在“Git”和“Linux”等项目中,像“sign-off”(↑2)这样的标题预告片 (↑1)是有效的提交结构化元数据。 这些全部附加到提交消息的末尾,在消息正文的“自由格式”(非结构化)部分之后。 这些是通常由冒号和空格( :␣分隔的标记值 (或键值 )对。

就像我刚才提到的那样,“签字”并不是目前实践中唯一的预告片。 例如见这个提交 ,这与“肮脏的牛”有关:

  mm: remove gup_flags FOLL_WRITE games from __get_user_pages() This is an ancient bug that was actually attempted to be fixed once (badly) by me eleven years ago in commit 4ceb5db9757a ("Fix get_user_pages() race for write access") but that was then undone due to problems on s390 by commit f33ea7f404e5 ("fix get_user_pages bug"). In the meantime, the s390 situation has long been fixed, and we can now fix it by checking the pte_dirty() bit properly (and do it better). The s390 dirty bit was implemented in abf09bed3cce ("s390/mm: implement software dirty bits") which made it into v3.9. Earlier kernels will have to look at the page state itself. Also, the VM has become more scalable, and what used a purely theoretical race back then has become easier to trigger. To fix it, we introduce a new internal FOLL_COW flag to mark the "yes, we already did a COW" rather than play racy games with FOLL_WRITE that is very fundamental, and then use the pte dirty flag to validate that the FOLL_COW flag is still valid. Reported-and-tested-by: Phil "not Paul" Oester <kernel@linuxace.com> Acked-by: Hugh Dickins <hughd@google.com> Reviewed-by: Michal Hocko <mhocko@suse.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Willy Tarreau <w@1wt.eu> Cc: Nick Piggin <npiggin@gmail.com> Cc: Greg Thelen <gthelen@google.com> Cc: stable@vger.kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> 

除了上面的“签收”预告片之外,还有:

  • “抄送”(被通知了补丁)
  • “AACK-BY”(由代码所有者承认,“对我来说很好”)
  • “已审核”(已审核)
  • “报告和testing”(报告和testing的问题(我认为))

其他项目,例如Gerrit,都有自己的标题和相关的含义。

请参阅: https : //git.wiki.kernel.org/index.php/CommitMessageConventions

故事的道德启示

我的印象是,虽然这个元数据的最初动机是一些法律问题(由其他答案来判断),但这种元数据的实践已经超越了仅仅处理形成作者链的情况。

[↑1]: man git-interpret-trailers
[↑2]:看起来,这些有时也被称为“呜咽”(缩写)。