遷移 Git 遠端儲存庫的 3 種方法與注意事項
用了 Git 之後,遷移儲存庫 (Repository) 真的簡單到不行,最近把一些公司用 Git 版本控管的專案遷移到 Visual Studio Online 與 BitBucket 平台,雖然遷移的過程十分順利,但還是有些注意事項與經驗可以分享,而且應該也有很多人不太清楚怎樣在不同平台之間遷移 Git 遠端儲存庫,所以特別撰文說明。
以下我透過幾種不同的遷移情境,來分別講解遷移 Git 儲存庫的過程:
1. 從其他 Git 平台遷移到 Bitbucket
你可以看到他預設支援的來源(Source)種類還蠻多的,除了知名的開源平台可以順利遷移外,你自己架設的 Git 或 Subversion 儲存庫也都可以順利遷移,只要輸入 URL 與設定認證的帳號、密碼就可以快速遷移成功,非常方便。
除此之外,若要匯入 GitHub 上面的專案,從該頁面的右邊也可以看見一個 Import from GitHub 的按鈕,透過這個功能可以直接與 GitHub 整合,經過認證授權後會直接列出你在 GitHub 上面的專案,並按下 Import 按鈕就會自動匯入完成,完全是無腦匯入工具。
2. 從任何 Git 儲存庫遷移到任何 Git 儲存庫 ( 開發中專案 )
我所謂的「開發中專案」,是指「已經將遠端儲存庫 複製 ( clone ) 下來的專案」。這些專案其實已經是遠端儲存庫的「完整備份」,所以要遷移到另一個遠端儲存庫,並不需要讓遠端對遠端的複製,其實只要很簡單的將本地儲存庫 推送 (push) 到另一個遠端儲存庫即可。
我們知道 Git 預設的遠端儲存庫名稱為 origin,你可以透過 git remote 與 git remote -v 得知遠端儲存庫的 URL,如下圖示:
如果我們想要遷移到另一個 Git 平台,首先你要取得新的遠端儲存庫 URL,然後替換掉原本在origin 裡面註冊的網址,最後再推送到 origin 即可 (此時已經是新的網址)。
我們以遷移到 Visual Studio Online 為例,假設網址如下:
https://willh.visualstudio.com/DefaultCollection/_git/test
https://willh.visualstudio.com/DefaultCollection/_git/test
那麼你可以輸入以下指令,重新指定 origin 註冊的 URL 位址:
git remote set-url originhttps://willh.visualstudio.com/DefaultCollection/_git/test
git remote set-url originhttps://willh.visualstudio.com/DefaultCollection/_git/test
最後再執行 git push --all 與 git push --tags 就可以將本地端的所有內容推送到新的遠端儲存庫。
3. 從任何 Git 儲存庫遷移到任何 Git 儲存庫 ( 沒在開發的專案 )
我所謂的「沒在開發的專案」,是指「專案只存在於遠端儲存庫中,尚未複製回來的那些專案」。這些專案勢必要複製回來,然後才能推送到新的遠端儲存庫。不錯,這時建議你不要直接用 git clone 把專案複製回來,而要用 git clone --bare 的方式複製回來。
為什麼呢?因為透過 git clone 把專案複製回來,會同時建立 工作目錄 (Working Directory) 與 本地儲存庫 (Local Repository),如果你根本不需要多儲存一份工作目錄的話,你就可以利用以下步驟,僅取回一個本地儲存庫就好,然後再透過指令將這份本地儲存庫同步到新的遠端儲存庫去。
我們用以下 GitHub 專案為例:
https://github.com/doggy8088/CacheControlWithoutMaxAgeTest.git
https://github.com/doggy8088/CacheControlWithoutMaxAgeTest.git
然後我們打算推送到以下 Git Repo URL:
https://willh.visualstudio.com/DefaultCollection/_git/test
https://willh.visualstudio.com/DefaultCollection/_git/test
那麼我們所要輸入的指令如下:
- git clone --barehttps://github.com/doggy8088/CacheControlWithoutMaxAgeTest.git
- cd CacheControlWithoutMaxAgeTest.git
- git push --mirrorhttps://willh.visualstudio.com/DefaultCollection/_git/test
等執行 git push --mirror 同步完成後,新的遠端儲存庫就有完整的 Git 版本資訊了!
最後,你再將下載的 CacheControlWithoutMaxAgeTest.git 資料夾砍掉即可。
注意事項
由於 Git 版本控管的特性 (分散式版本控管),每次複製專案回來,都是一份完整的 Git 儲存庫副本 (可視為是完整備份)。所以,當你將原本的遠端儲存庫遷移到了另一個遠端儲存庫之後,所以對所有團隊成員來說,原本的 Git 遠端儲存庫與新的 Git 遠端儲存庫其實是「完全相同」的儲存庫。
因此,開發人員只要將 origin 所設定的 URL 重新設定到新的 Git 遠端儲存庫 URL 即可,指令就是:
git remote set-url originhttps://willh.visualstudio.com/DefaultCollection/_git/test
git remote set-url originhttps://willh.visualstudio.com/DefaultCollection/_git/test
是的,就這麼簡單,剩下的完全不需要異動,你在變更完網址之後,就繼續做你的 git push / git pull 等動作;也不用把開發中的資料夾砍掉,然後再從新的遠端儲存庫複製(clone)回來,是不是非常漂亮呢! ^_^
相關連結
沒有留言:
張貼留言