如何更换git托管

devcloud 2017-08-14

有时候会遇到需要更换代码托管平台,从github,gitlab或者Bitbucket迁移到其它平台,过程中可能遇到不少问题,本文从是否保留历史提交记录两种需求出发,介绍一下基于git托管平台的迁移方法。

一、要求保留所有的提交记录的迁移方法

1、从旧的托管仓库中克隆一个裸版本库。

git clone –bare git://github.com/yourname/src_project.git

--bare:克隆一个裸版本库。

裸版本库的名字一般用原来的仓库名加上.git后缀,它不包含工作区,直接就是版本库的内容,包含的文件如下图所示,和正常版本库中.git文件夹的内容差不多。

2、到新的Git服务器上创建一个新项目,比如华为软件开发云配置管理服务。

新仓库地址:

git@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git

3、将本地裸版本以镜像的方式推送到华为软件开发云仓库中。

git push –mirrorgit@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git

--mirror指定refs/下的所有文件镜像的推送到远程仓库,而不是命名每个ref一一推送。本地更新的refs将被强制更新到远端仓库,本地删除的refs也将强制从远端仓库删除。

因为本地和远端仓库是两个不同的origin,所以如果不选择镜像推送,会产生如下错误:

提示:华为软件开发云默认对master分支开启分支保护,因此推送之前要解除分支保护。

4、删除本地裸版本仓库,src_project.git文件夹。

5、从新的托管服务器上克隆一份代码到本地。

git clonegit@codehub-cn-northeast-1.devcloud.hwclouds.com:f9c39cc7617a4caf9cb03d6bc8c3ac8a/dst_project.git

二、无需保留提交记录的迁移方法

1、从旧的托管仓库中下载一套代码。仅仅是代码,没有git版本管理相关内容。

2、到新的Git服务器上创建一个新项目。

新仓库地址:

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  #关联上游托管仓库并推送旧代码

Global site tag (gtag.js) - Google Analytics