前情提要

目前使用自己的電腦處理公事,很常在 terminal 執行 commit & push 時會出現錯誤訊息。

Error: <UserName> Permission Denied

看起來是當前環境中,user 權限不夠:user 無法對當前 repo 做事情等。我意識到我可能混用了工作、個人 GitHub 的帳號。而這次的錯誤是由於我用公司的帳號要執行 push 到個人 repo 時,出現的錯誤訊息。查找了許多解決的方法,以下紀錄我找到有效的管理方式(也可以直接看這兩篇:Handling Multiple Github Accounts on MacOSAdding an existing project to GitHub using the command line

Terminal 管理多個帳號

$ 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 這邊會自己抓到對應的人 )

參考資料