Git/GitHub 相關

連結 repo (帳號不同)

情境: 有2個帳號,平常用帳號A,要連帳號B的github

AI solustion

如果你平常用帳號 A,但現在想連到帳號 B 的 GitHub,做法取決於你是:

  • SSH 連線
  • 還是用 HTTPS
  • 還是想在同一台電腦同時用兩個帳號**

用 SSH 區分兩個帳號這是最專業、最乾淨的方法。

① 先確認你目前連的是誰

ssh -T git@github.com

② 為帳號 B 產生新的 SSH Key

ssh-keygen -t ed25519 -C "帳號B的email"

儲存成:

~/.ssh/id_ed25519_B

可以,但要注意 正確的用法

  1. 指令原本意思
ssh-keygen -t ed25519 -C "帳號B的email"
  • -t ed25519 → 產生 Ed25519 類型的 SSH key(目前推薦)
  • -C "帳號B的email" → key 的註解(方便辨識,不影響功能)
  • 之後它會問你要存在哪裡,預設是:
~/.ssh/id_ed25519
  1. 改存檔名可以嗎?

可以 ✅

ssh-keygen -t ed25519 -C "帳號B的email" -f ~/.ssh/id_ed25519_B
  • -f → 指定私鑰檔名(公鑰會自動加 .pub
  • 這樣就不會覆蓋帳號 A 的 key

輸出的結果:

~/.ssh/id_ed25519_B      ← 私鑰
~/.ssh/id_ed25519_B.pub  ← 公鑰
  1. 其他小技巧
  • 如果你直接按 Enter → 用預設檔名 → 可能覆蓋原本帳號 A 的 key ✅❌
  • 建議每個帳號用不同檔名 → 避免衝突
  • 公鑰 (.pub) 上傳到對應的 GitHub 帳號

🔹 總結

參數 用途
-t ed25519 key 類型
-C “email” 註解,方便辨識
-f ~/.ssh/id_ed25519_B 指定存檔名稱(非常建議)

③ 把公鑰加到帳號 B

cat ~/.ssh/id_ed25519_B.pub

然後:

  1. 登入帳號 B
  2. 到 GitHub → Settings → SSH and GPG keys
  3. 新增 key

④ 修改 SSH config

編輯:

nano ~/.ssh/config

加入:

# 帳號 A
Host github.com-A
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

# 帳號 B
Host github.com-B
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_B
  1. nano 是什麼?

nano 是一個終端機文字編輯器 就是在命令列裡打開檔案來編輯。

如果你用的是:

  • macOS ✅ 有
  • Linux ✅ 有
  • Windows (Git Bash) ✅ 有
  • Windows PowerShell ❌ 通常沒有(但可用 notepad

2.** ~/.ssh/config 是什麼?**

這是一個 SSH 設定檔

  • ~ = 你的使用者家目錄
  • .ssh = SSH 設定資料夾
  • config = SSH 的設定檔

完整意思是: 打開 SSH 的設定檔來編輯

  1. 這個檔案在幹嘛?

它用來告訴 SSH:

  • 用哪把 key
  • 連哪個 host
  • 帳號怎麼分開

例如你有兩個 GitHub 帳號(在 GitHub):

Host github-B
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_B

意思是,當你輸入:

ssh github-B

SSH 就會自動用:

~/.ssh/id_ed25519_B

那把 key。

  1. 為什麼你需要它?

因為現在你的電腦只會用:

id_ed25519

但你帳號 B 是用另一把 key。

沒有 config,SSH 不會自動幫你選。

Q: 如果檔案不存在怎麼辦?

正常,你可以直接:

nano ~/.ssh/config

然後新增內容,存檔就會自動建立。

簡單總結:

指令 意思
nano 打開文字編輯器
~/.ssh/config SSH 設定檔
用途 讓兩個 GitHub 帳號不打架

⑤ clone 時用不同 Host

帳號 A:

git clone git@github.com-A:帳號A/專案.git

帳號 B:

git clone git@github.com-B:帳號B/專案.git

這樣兩個帳號可以同時存在,不會衝突

可以,只要那把 SSH key 的「私鑰」還在你現在這台電腦上,就可以直接用。

關鍵只有一個:

GitHub 上的 SSH key 只是「公鑰」 真正決定能不能用的是:你電腦裡有沒有對應的「私鑰」

要確認兩件事

1.這台電腦有沒有那把私鑰?

通常會在:

~/.ssh/

看一下:

ls ~/.ssh

如果看到像:

id_ed25519
id_rsa
id_ed25519_work

就代表你有私鑰。

  1. 測試是不是帳號 B

Important: 首次連接本地 project 與 Github repo 也需要

可以先檢視 config,確認設定。

cat ~/.ssh/config

如果那把 key 是預設 key:

ssh -T git@github.com

如果你有多個 key,測試指定:

ssh -i ~/.ssh/那把key -T git@github.com

如果成功會顯示:

Hi 帳號B! You've successfully authenticated...

那就可以直接用。

git remote set-url origin git@ssh-Host-name:帳號B/repo.git

最後

 git push -u origin main
  • main 是本地的主線名稱,如果是master請改成 master。

都應該要成功。以下指令可以檢視連接的 repo

git remote -v

remote error: 含有過大檔案

指示建議:使用Git Large File Storage (LFS),看來是 Windows 限定(?

首次安裝

git lfs install

顯示

Updated Git hooks.
Git LFS initialized.

交由 LFS 追蹤

最好一定要用指令指定:

ex1. 副檔名為 .psd 交由 LFS 追蹤

git lfs track "*.psd"

ex2. 某個資料夾下的所有檔案交由 LFS 追蹤

git lfs track "A_Folder/*"

check:

cat .gitattributes

ouput:

A_Folder/* filter=lfs diff=lfs merge=lfs -text

如果資料夾有多層子目錄:

git lfs track "A_Folder/**/*"

check:

cat .gitattributes

output:

A_Folder/**/* filter=lfs diff=lfs merge=lfs -text

Test

git push -u origin main

github 分支落後 main

第一種

git fetch origin
git merge origin/main
git push

第二種

每次要推之前

git checkout bench
git fetch origin
git rebase origin/main
git push origin bench
  1. 切到 bench

  2. 抓最新 main

  3. 讓 bench 建立在最新 main 上

  4. 再 push

第三種(半自動)

不確定能不能 work

  1. 設定 Git alias(本地 Git 設定,不是 GitHub 設定):
git config alias.syncbench "!git fetch origin && git rebase origin/main"
  1. 每次要推之前
git checkout bench
git syncbench
git push
無符合的項目