簡體   English   中英

git commit -S 和 -s 有什么區別?

[英]What is the difference between git commit -S and -s?

我最近了解了簽名提交,並推薦了它們。 我們可以使用git commit -S在本地簽署提交。 之后我閱讀了 git 手冊頁,有一個名為-s的選項(用作git commit -s ),它說該選項簽署了提交。 當我查找-S它說它使用 GPG 密鑰對提交進行簽名。

我正在 GitHub 中使用 GPG 密鑰設置簽名提交。 這在推送時是否有所不同,或者在推送到遠程時是否相同?

-S--gpg-sign縮寫)使用 gnupg 來簽署您的提交,並向其添加 PGP 簽名。 這是一個加密簽名,證明 gpg 密鑰的所有者或有權訪問它的參與者正在提交/標記

-s--signoff )在提交消息的末尾添加“ Signed-off-by: Username<Email> ”。 任何人都可以將此字符串放在提交消息中(因此它不能保證作者身份),但它已被用於維護版權。 一些項目需要DCO “開發者來源證書”——本質上是開發者已經證明他們有權貢獻代碼的證明

-s/--signoff的實際描述是:

在提交日志消息的末尾添加提交者簽名的行。 簽核的含義取決於項目,但它通常證明提交者有權在同一許可證下提交此作品,並同意開發者原產地證書(有關更多信息,請參閱http://developercertificate.org/ )。

如上所述,它基本上在提交消息的末尾添加了“Signed-off-by:”行,如下所示:

$ git log
commit 172ccc467d2171b645bb55d51146af82ac36d356 (HEAD -> master)
Author: gino <my@email.com>
Date:   Sun Nov 15 11:56:10 2020 +0900

    Added something
    
    Signed-off-by: gino <my@email.com>

您可以將其讀作“我批准了提交並對此負責”。 它的目的已經在這篇相關文章中得到了很好的回答: Git 中的 Sign Off 功能是什么? . 它主要是一種基於特定項目的將責任分配給提交的方式,正如該帖子中提到的公認答案,當提交的版權或許可相關時,這是必需的。

但由於它只是提交消息的一部分,任何人都可以添加/編輯它,實際上您可以通過手動輸入或使用提交消息模板自行添加它。 您甚至可以將其他人的姓名/電子郵件放在那里。 在 Github 上,它將以與任何其他多行提交消息相同的方式處理

在此處輸入圖片說明

...並且 Github 不會根據簽核行驗證提交或顯示任何 UI 指示符“此提交已被批准”。 這當然違反了作為簽核目的的 DCO,您可以使用插件/機器人來強制執行 PR,例如probot/dco

-S/--gpg-sign選項,在另一方面,是一個實際的加密簽名,因為它使用你的GPG密鑰在您機器,做生成的提交,然后Github上使用給了你的公鑰驗證提交確實來自(或來自具有您的 GPG 密鑰的來源)。 正如關於簽署提交Github 文檔所說:

使用 GPG 或 S/MIME,您可以在本地簽署標簽和提交。 這些標簽或提交在 GitHub 上被標記為已驗證,因此其他人可以相信這些更改來自受信任的來源。

如果提交或標簽具有無法驗證的簽名,GitHub 會將提交或標簽標記為未驗證。

存儲庫管理員可以在分支上強制執行必需的提交簽名,以阻止所有未簽名和驗證的提交。

使用-S簽名並由 Github 正確驗證的提交將顯示“已驗證”指示符:

在此處輸入圖片說明

確保按照他們關於GPG 提交簽名驗證的步驟進行操作。 Github 將使用它:

在驗證簽名時,我們提取簽名並嘗試解析其密鑰 ID。 我們將密鑰 ID 與上傳到 GitHub 的密鑰進行匹配。 在您將 GPG 密鑰上傳到 GitHub 之前,我們無法驗證您的簽名。


至於使用哪個,這取決於你在 Github 上放什么以及你“簽署提交”的目的是什么。 如果您只是想表明實際上是(或您的一台機器/機器人)推動了該提交,我會說使用 GPG 密鑰進行簽名更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM