# 前言
不知道讀者有沒有需要將遠端儲存庫搬家的需求?
情境可能是這樣,由於現在 copilot 好棒棒,大家紛紛想擁抱微軟,而目前專案都放在 GitLab 遠端儲存庫,現在想要把專案放到 GitHub 管理。
然後又很剛好,你換了新的電腦,地端完全沒有任何 Git 專案資料,你沒辦法直接把地端的資料上傳到 GitHub。
如果你剛好也遇到這個需求,這篇文章可能有機會幫助到你。
疑?我怎麼會說…「也」呢?
進入今天的主題
# 第一步:把遠端儲存庫的內容 clone 回地端
這步不用多說,畢竟要把資料推到 GitHub ,我們需要「地端儲存庫」當作搬家的中繼站。
假設我想搬的專案是 GitLab 上的 GitLearn
專案,把他 clone 回地端:
git clone https://gitlab.com/imall1110/gitlearn.git |
# 第二步:把遠端追蹤分支的資料全部 checkout 回來
git clone
指令只會把預設的遠端分支拉回地端使用,不過如果我們每個分支都要搬家的話,就必須先讓地端出現所有分支。
如果是指令派的讀者,可以逐個執行 git checkout
指令。
筆者這個步驟很習慣直接使用 Git GUI 進行切換分支的行為。
這一步在 第四步 之前完成即可。
# 第三步:在 GitHub 建立專案
想要搬家,首先要先有個家。
我們需要先在 GitHub 建立好一個空的遠端儲存庫,建立的方式如之前在 遠端儲存庫基本操作 示範的那樣,只要建立一個「空的」儲存庫即可。
# 第四步:在地端更改地址
一樣是 遠端儲存庫基本操作 文章中,我們曾經說明如何使用 git remote add
指令幫「地端儲存庫」建立「地址」。
而 git clone
回地端的儲存庫,不用特別執行 git remote add
,Git 會自動幫我們在「地端」把「遠端地址」建立好。
由於是從 GitLab 平台 clone 下來,地址會是 GitLab 的資訊,想確認這件事的話可以用 git remote -v
指令確認:
$ git remote -v | |
origin https://gitlab.com/imall1110/gitlearn.git (fetch) | |
origin https://gitlab.com/imall1110/gitlearn.git (push) |
要改掉這個地址,我們可以使用這個指令:
git remote set-url 名稱 網址 |
以目前這個要搬家到 GitHub 的情境,完整指令會長這樣:
git remote set-url origin https://github.com/imall/GitLearn.git |
再使用 git remote -v
指令確認,資料正確就是改成功囉!
$ git remote -v | |
origin https://github.com/imall/GitLearn.git (fetch) | |
origin https://github.com/imall/GitLearn.git (push) |
# 第五步:推送所有分支到 GitHub
確定所有要推到新家的分支都已經在地端儲存庫了,如果 沒有 的話,請先回上一步把儲存庫地址 改回去舊的儲存庫,再操作 第二步 的動作。
如果確定要搬家的分支都在地端了,直接執行這個指令:
git push --all |
$ git push --all | |
Enumerating objects: 396, done. | |
Counting objects: 100% (396/396), done. | |
Delta compression using up to 12 threads | |
Compressing objects: 100% (183/183), done. | |
Writing objects: 100% (396/396), 512.75 KiB | 256.38 MiB/s, done. | |
Total 396 (delta 151), reused 396 (delta 151), pack-reused 0 | |
remote: Resolving deltas: 100% (151/151), done. | |
To https://github.com/imall/GitLearn.git | |
* [new branch] Emilia -> Emilia | |
* [new branch] Ram -> Ram | |
* [new branch] Rem -> Rem | |
* [new branch] Subaru -> Subaru | |
* [new branch] dev -> dev | |
* [new branch] main -> main |
執行完指令後,到遠端儲存庫確認分支是否都存在,沒問題的話就完成了:
# 補充:更改遠端地址的其他方式
通常搬家的需求不會時常發生,所以設定搬家地址的指令並不像其他指令一樣會常常使用,使得指令不太會被記得,要是每次搬家都要去查一次指令怎麼設定其實有點麻煩。
git remote set-url 名稱 網址
指令其實只是在編輯專案的 config
檔案而已,這個 config
檔案位置在 .git/config
。
如果原本的儲存庫跟新的儲存庫定義的名稱都叫 origin
的話,搬家指令就是在改這段網址:
知道原理後,我們就可以手動更改這段網址,不用去記指令囉!
# 總結
總結一下搬家步驟
- 將舊家的專案 clone 回地端
- 將所有分支切回地端
- 建立新家的儲存庫
- 更改地端儲存庫的地址
- 將所有分支推到新家
這個搬家動作其實不限於 不同平台 的儲存庫,只要有不同的遠端網址,即便儲存庫都在 GitHub,也可以照著步驟搬移。 雖然應該沒人會在 GitHub 內部搬家就是了