如何設定 git credentials,git setting on macOS|learning notes

Jinny Chen
6 min readFeb 12, 2019

--

如何解決「 git push fatal 一直要求 verify email address」

Photo by Clément H on Unsplash

Git 向遠端儲存庫傳輸資料有兩種方式:SSH 金鑰 或 HTTPS 通訊協定。

我發生 git push 失敗時,是打算透過 HTTPS 遠端傳輸檔案,將完成的檔案 git commit 到已經創建好的 Github Repository,但 iTerm 顯示下面資訊:

remote: You must verify your email address.
remote: See https://github.com/settings/emails.
fatal: unable to access ‘https://github.com/username/repo.git/’: The requested URL returned error: 403

P.S. 這裡 username 代表自己的使用者名稱;repo 代表 repository名稱。

所以我參考了 Github 官方的說明 ,先前使用 Github 時已 verify 過 email 而且無法重寄認證信,而且確定我設定的遠端地址正確。

思考可能原因是我之前使用的 Github 帳戶因為 email 刪除已經不存在了,所以持續要求 verify email address 的原因可能是這台電腦儲存了我之前的帳戶的帳密,而在我每次要 git commit 的時候就會因為和遠地帳戶帳密不符而失敗。

類似的問題像是更改 username 或 密碼等,在 Stackoverflow 也有查詢到解法:改用 SSH 金鑰傳輸就不用認證帳密。

但是還是想用 HTTPS 傳輸的話,只好研究一下要怎麼糾正電腦設定了。

Setting your commit email address in Git

首先,根據 Github 官方對於 git setting 的敘述,要將電腦中的檔案 commit 後 push 到 repository 需設定相應的 email 和 username,:

“ You can use the git config command to change the email address / username you associate with your Git commits. “

於是我用 git config全域設定正確的 email addressusername

git config --global user.name "xxx"
git config --global user.email "xxx@gmail.com"
並用git config --global user.name
git config --global user.email
檢查是否有設定正確

檢查後,就確保了現在整台電腦的 Git Setting 都已經變成正確的 username 和 email,不管在哪個資料夾中的 git 專案都一樣。

但還是 git push 失敗了0 _ 0。

那問題就是:為什麼已經全域設定了還是會認證錯誤?
經過一番爬文發現問題原來是 Git 內建的內存機制 credential storage 儲存了舊的帳密資料。

Git credentials

要探討這個問題,須先了解 Git 的認證機制:
通過 HTTPS 傳輸時,預設需要輸入帳號密碼才可以訪問,而 Git 內建 credential storage 提供了開發者將帳密儲存於自己電腦中的功能,就不用每次遠端傳輸資料時都要輸入 帳號密碼;儲存可分為 osxkeychain、store、chache 三種方式。

所以我一直無法成功 push 的原因是每次要傳輸時,Git 調用了過去被儲存的舊資料的緣故;所以我必須要重新設置 git credentials:

先用這個指令查詢電腦系統支援的 git credentials 形式:

git help -a | grep credential

在不同的作業系統平台,Git credential storage 有不同的預設值,如果你跟我一樣是 mac OS X 用 Homebrew 安裝 Git ,會得到如下的資訊:

credential                remote-ext
credential-cache remote-fd
credential-cache--daemon remote-ftp
credential-osxkeychain remote-ftps
credential-osxkeychain remote-http

Homebrew 安裝過程預設 HTTPS 通訊協定情況使用 osxkeychain 輔助工具來儲存認證訊息,表示透過 HTTPS 連接 Repository 時,我的系統用 osxkeychain 儲存的帳密向其要求傳輸權限,所以如果把 HTTPS 的 credential 設定修改,就能重新輸入新的、正確的帳號密碼了。

修改方式如下:

  1. 用這行命令找出所有 credential.helper 在電腦中的位置:
git config --show-origin --get credential.helper

通常可能是在…/usr/share/git-core/gitconfig

2. 找到 .gitconfig 文件後,將下面這段文字修改後儲存:

原始預設:
[credential] helper = osxkeychain
刪除 osxkeychain 變成:
[credential] helper =

此時沒有設置儲存方式,之後每次 push 都會詢問帳密。

3. 輸入以下指令來檢查是否已經成功取消osxkeychain設置,如果還是出現 osxkeychain 表示沒有完成,可能一台電腦上有多個 .gitconfig 文件需要處理

git config credential.helper

4. 檢查完成後,進行 git push , 此時 git 會詢問帳密,便可輸入新的、正確的帳號密碼了。

5. 最後可以直接在 iTerm 命令列恢復 osxkeychain 設定:

git  config --global  credential.helper  osxkeychain

或開啟.gitconfig 文件修改 [credential] helper = osxkeychain ,由於使用 store方式會產生一個明碼的檔案在電腦中,比較不建議,為了安全起見,還是使用 osxkeychain 方式來儲存帳密。而如果是用 cache 方式的話,會將帳密暫存在硬碟中,一定時間內可以快取,但時間過了就要再重新輸入。

這樣就完成了 git credentials 的重新設置,另外如果想要查看 git config 的相關設定,可以用這個指令git config --list

--

--

Jinny Chen
Jinny Chen

Written by Jinny Chen

Designer turned Developer. Like to walk in the light of creative altruism.

No responses yet