一個正常的 git commit 會含有 username 以及 email,用來辨別是誰提交了這個 commit。不過基本的使用情境,username 以及 email 都是可以直接透過 git config user.name
以及 git config user.email
直接修改。
這會造成什麼問題呢?一種是我可以直接用別人的名義 commit,或是我可以假冒別人的名字修改 commit。雖然說一般 git server 都會有認證機制,沒有權限的 repo 是無法存取,但沒有認證的帳號仍然是可以在自己有權限的範圍內做出一些不屬於自己該做的事。
因此我們需要認證 git commit。以下是簡單的步驟: (for Mac)
安裝並產生 GPG
brew install gpg
- 在你的 profile (.zshrc, .bashrc 之類) 檔內加上
export GPG_TTY=$(tty)
gpg --full-gen-key
過程中會要你輸入 gpg key 的設定,以下是我的設定
- 最後會要你填入真實姓名以及 email ,這邊就填寫自己的資訊,注意 email 一定要跟你的 github email 一樣,或者是 github 給你的
xxx@users.noreply.github.com
(可以在 https://github.com/settings/emails 找到) - 然後就是 passphrase 了,主要用於之後存取 gpg key 時需要,建議輸入
gpg --list-keys
來看看自己有哪些 gpg key echo "gpg sign 測試" | gpg --clearsign
來測試簽署功能,如果跳出以下畫面就代表已經能正常簽署
添加 GPG Key 到 GitHub
gpg --armor --export ${KEY_ID}
這裡使用前一段落的 key idid,複製螢幕上看到的----BEGIN PGP PUBLIC KEY BLOCK-----
到----END PGP PUBLIC KEY BLOCK-----
字串- 登入 GitHub 並進入 https://github.com/settings/keys
- 在 “GPG keys” 區域,點選『New GPG Key』按鈕,然後把複製的內容貼上並儲存
- gpg key email 如果與 GitHub 帳號對不上,會變成 unverified key 如下圖
設定 git 使用 GPG
git config --global user.signingkey ${KEY_ID}
這裡使用前一段落的 key idgit config --global commit.gpgSign true
設定 commit 時自動簽署git config --global tag.gpgSign true
設定 tag 時自動簽署- 注意 git 設定的 email 是否與 GitHub 帳號 email 相同,如果不是則需要
git config --global user.email ${email}
把 email 用對(對不起來仍然可以 commit / push 但是不會出現 verified)
如果在 github commit 旁邊看到 Verified ,那麼恭喜你,已經完成自己的 NFT 了