git仓库迁移

本文最后更新于:2023年8月15日 下午

git仓库迁移


今天学到个新知识,仓库迁移的,遇到一个问题是希望把gitee上面的代码迁移到内网的gitlab上,当然是包括所有的历史记录和分支,tag等等;

主要用法是这样:

1
2
3
4
5
6
7
8
1、克隆远程仓库镜像到本地
git clone --mirror 仓库地址
2、切换至文件夹
cd dir
3、设置remote
git remote set-url origin 新代码仓库地址
4、推送镜像到新仓库
git push –-mirror

注意事项:

一、第一步拉原始仓库镜像,保险起见,最好是找个新文件夹操作,不要影响以前的本地仓库;

我想既然可以拉ssh和http,是不是本地也可以,果然!!

我是这么写的,拉的本地文件夹:

1
git clone --mirror D:/workspace/java/backend2/.git

这里涉及另一个知识点,clone有三种方式 :

举个具体的例子:gitlab远程仓库有master,a,b三个分支;

D盘的本地仓库有,master,a,两个本地分支,一个remote的b分支,当前在a分支

1、git  clone  url

这是我们最常用的方法,

clone远程仓库会有一个master本地分支,a,b两个remote关联远程分支;

clone本地仓库会有一个本地当前分支a,master,b两个remote关联远程分支

2、git clone –bare url

称为裸仓库克隆;

clone远程仓库会有一个master,a,b三个本地分支;

clone本地仓库会有master,a两个本地分支,b丢失;

3、git clone –mirror url

称为镜像仓库克隆

clone远程仓库会有一个master,a,b三个本地分支;

clone本地仓库会有master,a两个本地分支,一个remote的b分支;

所以说mirror是最完美的复刻

二、设置remote

这一步git remote set-url —push origin url;

其中—push 是设置推送的远程地址,还可以设置—fetch的地址,如果两个一致,那就直接:
git remote set-url origin url 就行了。

设置不同的地址之后是这样:

1
2
3
$ git remote -v
origin  D:/workspace/java/backend2/.git (fetch)
origin  ssh://git@192.168.1.100:20222/backenddevelopergroup/xiao.git  (push)

三、推送镜像到gitlab上一个新的空仓库

用新仓库,不然的话,如果是已存在分支的仓库,他会删除你已存在的分支,再推送自己的分支;

这里我又遇到一个报错:deny updating hidden ref

原因是我拉的是本地仓库,会有一些本地分支和remote的远程分支,本地分支能推上去,而这些远程关联的分支称为hidden ref,

它是不允许推到仓库的,这一点我没搞明白,不知道是gitlab设置的原因还是什么;

我的做法是在本地手动checkout 一下这些hidden ref,相当于把他们都变成了本地分支,然后就能推上去了,over!

参考链接:

https://blog.csdn.net/shouhuzhezhishen/article/details/126012426


git仓库迁移
http://bestkele.com/2022/09/07/investigation/git-move/
作者
kele
发布于
2022年9月7日
许可协议