前情提要
目前使用自己的電腦處理公事,很常在 terminal 執行 commit & push 時會出現錯誤訊息。
Error: <UserName> Permission Denied
看起來是當前環境中,user 權限不夠:user 無法對當前 repo 做事情等。我意識到我可能混用了工作、個人 GitHub 的帳號。而這次的錯誤是由於我用公司的帳號要執行 push 到個人 repo 時,出現的錯誤訊息。查找了許多解決的方法,以下紀錄我找到有效的管理方式(也可以直接看這兩篇:Handling Multiple Github Accounts on MacOS、Adding an existing project to GitHub using the command line)
Terminal 管理多個帳號
- 先到 ~/.ssh 設置 config:這邊會儲存你的金鑰檔,就是我們很常看到的公鑰 (public key)、私鑰 (private key)。深入瞭解可以參考:關於 SSH(內有產生金鑰的方法)、SSH 原理與運用-遠程登錄、vim 指令。
$ cd ~/.ssh
$ vim config
- 在 config 中,輸入
i
編輯,編輯完之後,輸入Esc
&:wq
(離開並儲存),以下是我的 config 檔設定:
#GitHub - personal
Host github.com-nini
HostName github.com
User nini-chang
PreferredAuthentications publickey
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
#GitLab - company
Host github.com-company
HostName github.com
User nini.chang
PreferredAuthentications publickey
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa_company
- 確認當前環境的 user 資訊(可參考:使用者設定),我目前只有設定 user.name,因為公司跟個人的 email 是不同的,這個部分可以在專案中設定。
$ git config --global user.name "firstName.lastName"
$ git config --global user.email "email"
-- 檢查一下有沒有成功設定好
$ git config --list
到這邊,其實就已經設定好了。接下來就是在 import local project 到 GitHub 時,抓到對應的使用者。
Import local project to GitHub
- 先在 GitHub 上開一個全新的 repo,並複製 url。開啟 terminal 到 local project 中,執行以下程式碼:(詳見原文)
- 這邊要注意:現在 GiHub 開啟新的 repo 後,預設的主分支是 main,可參考 GitHub renaming doc (中文),這邊會以我個人的帳號作為範例:(project: my-project)。另外,如果沒有修改成 main 直接推上去,就會多一個分支 master,且 origin/head 是 main 不是 master,這部分在後續跑發布(或自動化發布)就會有點小麻煩。
-- 修改 master 至 main
$ git branch -m master main
-- initialize git repo
$ git init
$ git add .
-- 設定 remote url
$ git remote add origin git@github.com-nini:nini-chang/my-project.git
-- 確認一下 remote 是否有成功設定
$ git remote -v
origin git@github.com-nini:nini-chang/my-project.git (fetch)
origin git@github.com-nini:nini-chang/my-project.git (push)
$ git commit -m "type commit message here"
$ git push -f origin main
到這邊就完成設定啦!另外,如果是 clone,就直接執行 $ git clone git@github.com-nini:nini-chang/my-project.git nini-chang
(後面的 nini-chang
是 config 中對應的 User,如果有成功設定其實不用打也沒關係,github.com-nini
這邊會自己抓到對應的人 )
參考資料
- Handling Multiple Github Accounts on MacOS
- Adding an existing project to GitHub using the command line
- 關於 SSH(內有產生金鑰的方法)
- SSH 原理與運用-遠程登錄
- vim 指令
- 使用者設定 (global user.name & user.email)
- GitHub renaming doc (中文)