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可以,但要注意 正確的用法
- 指令原本意思
ssh-keygen -t ed25519 -C "帳號B的email"-t ed25519→ 產生 Ed25519 類型的 SSH key(目前推薦)-C "帳號B的email"→ key 的註解(方便辨識,不影響功能)- 之後它會問你要存在哪裡,預設是:
~/.ssh/id_ed25519
- 改存檔名可以嗎?
可以 ✅
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 ← 公鑰
- 其他小技巧
- 如果你直接按 Enter → 用預設檔名 → 可能覆蓋原本帳號 A 的 key ✅❌
- 建議每個帳號用不同檔名 → 避免衝突
- 公鑰 (
.pub) 上傳到對應的 GitHub 帳號
🔹 總結
| 參數 | 用途 |
|---|---|
| -t ed25519 | key 類型 |
| -C “email” | 註解,方便辨識 |
| -f ~/.ssh/id_ed25519_B | 指定存檔名稱(非常建議) |
③ 把公鑰加到帳號 B
cat ~/.ssh/id_ed25519_B.pub然後:
- 登入帳號 B
- 到 GitHub → Settings → SSH and GPG keys
- 新增 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_Bnano ~/.ssh/config 是什麼?
nano是什麼?
nano 是一個終端機文字編輯器 就是在命令列裡打開檔案來編輯。
如果你用的是:
- macOS ✅ 有
- Linux ✅ 有
- Windows (Git Bash) ✅ 有
- Windows PowerShell ❌ 通常沒有(但可用
notepad)
2.** ~/.ssh/config 是什麼?**
這是一個 SSH 設定檔
~= 你的使用者家目錄.ssh= SSH 設定資料夾config= SSH 的設定檔
完整意思是: 打開 SSH 的設定檔來編輯
- 這個檔案在幹嘛?
它用來告訴 SSH:
- 用哪把 key
- 連哪個 host
- 帳號怎麼分開
例如你有兩個 GitHub 帳號(在 GitHub):
Host github-B
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_B意思是,當你輸入:
ssh github-BSSH 就會自動用:
~/.ssh/id_ed25519_B
那把 key。
- 為什麼你需要它?
因為現在你的電腦只會用:
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
就代表你有私鑰。
- 測試是不是帳號 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 -vremote 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 .gitattributesouput:
A_Folder/* filter=lfs diff=lfs merge=lfs -text
如果資料夾有多層子目錄:
git lfs track "A_Folder/**/*"check:
cat .gitattributesoutput:
A_Folder/**/* filter=lfs diff=lfs merge=lfs -text
Test
git push -u origin maingithub 分支落後 main
第一種
git fetch origin
git merge origin/main
git push
第二種
每次要推之前
git checkout bench
git fetch origin
git rebase origin/main
git push origin bench
切到 bench
抓最新 main
讓 bench 建立在最新 main 上
再 push
第三種(半自動)
不確定能不能 work
- 設定 Git alias(本地 Git 設定,不是 GitHub 設定):
git config alias.syncbench "!git fetch origin && git rebase origin/main"- 每次要推之前
git checkout bench
git syncbench
git push