有時候會遇到需要更換代碼托管平臺,從github,gitlab或者Bitbucket遷移到其它平臺,過程中可能遇到不少問題,本文從是否保留歷史提交記錄兩種需求出發(fā),介紹一下基于git托管平臺的遷移方法。
一、要求保留所有的提交記錄的遷移方法
1、從舊的托管倉庫中克隆一個裸版本庫。
git clone –bare git://github.com/yourname/src_project.git
--bare:克隆一個裸版本庫。
裸版本庫的名字一般用原來的倉庫名加上.git后綴,它不包含工作區(qū),直接就是版本庫的內容,包含的文件如下圖所示,和正常版本庫中.git文件夾的內容差不多。

2、到新的Git服務器上創(chuàng)建一個新項目,比如華為軟件開發(fā)云配置管理服務。
新倉庫地址:
git@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git

3、將本地裸版本以鏡像的方式推送到華為軟件開發(fā)云倉庫中。
git push –mirrorgit@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git
--mirror指定refs/下的所有文件鏡像的推送到遠程倉庫,而不是命名每個ref一一推送。本地更新的refs將被強制更新到遠端倉庫,本地刪除的refs也將強制從遠端倉庫刪除。
因為本地和遠端倉庫是兩個不同的origin,所以如果不選擇鏡像推送,會產生如下錯誤:

提示:華為軟件開發(fā)云默認對master分支開啟分支保護,因此推送之前要解除分支保護。

4、刪除本地裸版本倉庫,src_project.git文件夾。
5、從新的托管服務器上克隆一份代碼到本地。
git clonegit@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git
二、無需保留提交記錄的遷移方法
1、從舊的托管倉庫中下載一套代碼。僅僅是代碼,沒有git版本管理相關內容。
2、到新的Git服務器上創(chuàng)建一個新項目。
新倉庫地址:
git@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git
3、git init? #在本地代碼根目錄文件夾下初始化倉庫
4、git remote add origingit@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git
5、git pull origin master –rebase? #從新托管倉庫上拉去已存在的內容
6、git add .
7、git commit
8、git push --set-upstream origin master? #關聯上游托管倉庫并推送舊代碼