Share This Post

What is GPG ?

About commit signature verification – GitHub Docs

Using GPG or S/MIME, you can sign tags and commits locally. These tags or commits are marked as verified on GitHub so other people can be confident that the changes come from a trusted source. — GitHub

大家可能偶爾在協作 Commit 時,git global 的 config 設定下,有時串味(?了,不小心帶入到別人的名字來做 Commit ,現在有了 GPG 可以避免這個問題,當你送出 Commit 時就能驗證,這筆 Commit 確實是你本人、你的電腦發出的,如下圖這個樣式,會帶上一個 “Verifie” 字樣。

Untitled

How To GPG ?

本教學只包含 Mac OS 範例

確認

首先透過以下指令來確認是否已經有 GPG key

gpg --list-secret-keys --keyid-format=long

安裝

若是電腦中沒有 GPG 安裝過,可以使用 brew 安裝

brew install gnupg

or 下載使用

GnuPG – Download

確認沒有 GPG key 後,請新增一個!

生成 GPG Key

透過以下指令生成

gpg --full-generate-key
Untitled

預設選擇第一個即可

RSA 金鑰的長度可能介於 1024 位元和 4096 位元之間.
你想要用多大的金鑰尺寸? (3072)

這邊我會直接 enter 讓他選擇預設位元,但如果你有自己的想法也可以選擇其他位元數~

請指定這把金鑰的有效期限是多久.
         0 = 金鑰不會過期
      <n>  = 金鑰在 n 天後會到期
      <n>w = 金鑰在 n 週後會到期
      <n>m = 金鑰在 n 月後會到期
      <n>y = 金鑰在 n 年後會到期
金鑰的有效期限是多久? (0)

可以選擇鑰匙的有效期限,一樣預設 enter 是不過期

以上正確嗎? (y/N) y

正確打 y ~

GnuPG 需要建構使用者 ID 以識別你的金鑰.

輸入自訂的 ID 資訊,以及 email,這邊很重要的是,你的 email 輸入要是使用跟你 commit 時所用的 email 同一個,不然無法配對做驗證,假如說你 git config email 設定 tilda@example.com,在這裡的 email 也請輸入 tilda@example.com

註釋,可寫可不寫啦XD,就是一個備註的概念,完整確認完成後會再詢問一次以上資料是否正確,打 O 代表確認正確後,會跳出這個視窗:

Untitled

這個密語會在你配對時用到,請不要亂輸入或忘記囉。

接著就會建立好你的 GPG Key,透過第一筆指令來查找這筆 Key:

gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

接著複製 GPG SEC Key ID:3AA5C34371567BD2

並且執行以下指令來取得公鑰資訊

$ gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format

複製 GPG 密鑰,從 -----BEGIN PGP PUBLIC KEY BLOCK----- 開始,到 -----END PGP PUBLIC KEY BLOCK----- 結束。

貼到你的 GitHub 中的 GPG Key 即可。

Untitled
Untitled
Untitled
Untitled

提交給 Git GPG

接下來要讓知道,你的 GPG 簽章是簽誰的名字,剛剛透過指令取得 GPG Key ID 後使用以下指令設置:

$ git config --global user.signingkey 3AA5C34371567BD2

會將全域的 commit 配置成已經簽名的 GPG Key 送出,或是你想針對特定的 commit 簽章也可以這麼做:

$ git commit -S -m "your commit message"
# Creates a signed commit

在任何地方預設啟用簽名

git config --global commit.gpgsign true

驗證過的樣式如下:

Untitled

大功告成!

這樣就配置完成了,後續還有多個帳號怎麼配置 GPG ? 那就是另一個故事了

沒有啦,就是配置好 email 對應 GPG Key 之後,你在簽章提交時選對 ID 提交即可!

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。