如何設定 git credentials,git setting on macOS|learning notes
如何解決「 git push fatal 一直要求 verify email address」
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 address
和 username
:
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 設定修改,就能重新輸入新的、正確的帳號密碼了。
修改方式如下:
- 用這行命令找出所有 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
。
參考內容
StackOverFlow :
disable git credential-osxkeychain
Unable to push to Git — keeps asking me to verify emailBlog :
如何透過 Git Credential 管理透過 HTTP 通訊協定存取儲存庫的帳號密碼
git 緩存密碼導致的不能和遠程倉庫交互
以上分享歡迎多方指教和建議,謝謝閱讀~