因為你在指令中使用了環境變數,在不同的視窗環境下,寫法會稍微有一點點不同。
如果你使用的是 PowerShell 視窗,請輸入以下指令:
ssh -T -i “$env:USERPROFILE.ssh\your-key_ed25519” [email protected]
如果你使用的是傳統的 CMD 視窗,請輸入以下指令:
ssh -T -i “%USERPROFILE%.ssh\your-key_ed25519” [email protected]
當你按下 Enter 鍵執行之後,系統會連線到 GitHub 並回傳訊息,請根據畫面上顯示的文字來判斷結果:
如果畫面顯示 Hi 小帳的名字! 開頭的文字,代表這把金鑰已經正確設定在 小帳底下了。
如果畫面顯示 Hi max32002! 開頭的文字,代表這把金鑰目前被綁定到了錯誤的帳號。
目前系統檢查出來的結果依然顯示為 max32002 ,這代表你還需要去登入小帳的 GitHub 帳號,並將這把金鑰重新新增進去,才能正常使用。
實際執行上面句子, 會遇到錯誤因為
在 CMD 環境中,系統無法辨識以 $ 開頭的變數符號,因為那是 PowerShell 的專屬語法。如果在 CMD 裡使用,系統會找不到路徑。
請改用以下適合 CMD 的指令:
DOS
ssh -T -i "%USERPROFILE%\.ssh\your-key_ed25519" [email protected]
或是直接填入完整的絕對路徑:
DOS
ssh -T -i "C:\Users\max32\.ssh\your-key_ed25519" [email protected]
File: C:\Users\max32\.ssh\config
# Default GitHub account: max32002
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
# GitHub account: max2little (use host alias: github-max2little)
Host github-max2little
HostName github.com
User git
IdentityFile ~/.ssh/max2little_ed25519
IdentitiesOnly yes
設定已經全部完成!以下是設定內容的摘要:
| 帳號 | SSH 主機名稱 | 金鑰名稱 |
| max32002 (預設, 大帳) | [email protected] | id_rsa |
| max2little (小帳) | git@github-max2little | max2little_ed25519 |
使用方法:未來在複製或設定 max2little 帳號的遠端儲存庫時,請將原本的 github.com 替換為 github-max2little。
範例指令如下:
Bash
git clone git@github-max2little:your-repo-name.git
預防帳號切換錯誤方法
[email protected] (小帳) 這個 email 被登記在 GitHub 的 max-little-account 帳號底下,所以即使 commit 不是 max-little-account 做的,GitHub 也會把該 author 連結到那個帳號的頭像。會發生即使是使用大帳進行 commit, 但是在history 上會看到是小帳進行 commit.
修正步驟(事後參考)
# 1. 設定這個 repo 的 git 身份
git config user.email "[email protected]"
git config user.name "Max"
# 2. 重寫最近 N 個 commit 的 author
git rebase HEAD~4 --exec "git commit --amend --reset-author --no-edit"
# 3. Force push(因為 commit hash 改變了)
git push origin main --force
預防方法
在這個 repo 目錄下執行一次,之後每個新 commit 都會用個人信箱:
git config user.email “[email protected]”
電腦的 global git config(~/.gitconfig)若設定的是公司信箱,建議也在每個私人 repo 單獨覆蓋,避免日後再出現同樣問題。