不知道讀者有沒有需要將遠端儲存庫搬家的需求?
情境可能是這樣,由於現在 copilot 好棒棒,大家紛紛想擁抱微軟,而目前專案都放在 GitLab 遠端儲存庫,現在想要把專案放到 GitHub 管理。
然後又很剛好,你換了新的電腦,地端完全沒有任何 Git 專案資料,你沒辦法直接把地端的資料上傳到 GitHub。
如果你剛好也遇到這個需求,這篇文章可能有機會幫助到你。
疑?我怎麼會說....「也」呢?
進入今天的主題
幫遠端儲存庫搬家
這步不用多說,畢竟要把資料推到 GitHub ,我們需要「地端儲存庫」當作搬家的中繼站。
假設我想搬的專案是 GitLab 上的 GitLearn
專案,把他 clone 回地端:
git clone https://gitlab.com/imall1110/gitlearn.git
git clone
指令只會把預設的遠端分支拉回地端使用,不過如果我們每個分支都要搬家的話,就必須先讓地端出現所有分支。
如果是指令派的讀者,可以逐個執行 git checkout
指令。
筆者這個步驟很習慣直接使用 Git GUI 進行切換分支的行為。
這一步在 第四步 之前完成即可。
想要搬家,首先要先有個家。
我們需要先在 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)
確定所有要推到新家的分支都已經在地端儲存庫了,如果 沒有 的話,請先回上一步把儲存庫地址 改回去舊的儲存庫,再操作 第二步 的動作。
如果確定要搬家的分支都在地端了,直接執行這個指令:
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
的話,搬家指令就是在改這段網址:
知道原理後,我們就可以手動更改這段網址,不用去記指令囉!
總結一下搬家步驟
這個搬家動作其實不限於 不同平台 的儲存庫,只要有不同的遠端網址,即便儲存庫都在 GitHub,也可以照著步驟搬移。 雖然應該沒人會在 GitHub 內部搬家就是了