git仓库迁移遇到的问题(git push --mirror)

6,853 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

今天遇到git仓库迁移的问题,记录如下:

问题背景

今天遇到一种情况,要把一个项目从内网gitlab迁移到外网gitlab,我使用的是命令迁移.

使用如下命令进行导出项目:

git clone --bare <仓库地址>

准备到了外网使用如下命令进行上传:

git push --mirror <仓库地址>

导出很顺利,在往外网新仓库上传的时候出现了一些问题:

问题1:

提示不是一个仓库

这个问题比较简单,因为没进入到xxx.git文件下

必须先进入xxx.git下再执行就行了

问题2:

提示推送失败

这个问题废了不少时间,之前没遇到过,看提示中有一句无法删除默认分支. 以为是默认分支的问题,所以上gitlab上将新仓库的默认分支删除/改名,结果都没效果.

然后一顿百度后,很多都说是权限问题,检查了一下gitlab上我的权限,确定我的权限是Maintainer,应该不会出现权限问题

然后尝试使用-f强制推送,依然无效果

冷静了五分钟后,从头梳理,怀疑又可能是gitlab远端仓库建的有问题,于是删除仓库,重建仓库,果然可以了.

两次建库的区别在于: 第二次没选择自动生成README.md,

选择了这个选项,会自动给仓库初始化,并建立一个默认分支.

这样的情况就不能使用git push --mirror推送了

总结

推送命令总结

之前没有使用过--bare和--mirror这两个参数命令,今天总结一下

git clone 加上 --bare是拉取一个裸版本库,裸版本库和正常git clone拉取的正常库的区别是:

  1. 裸库只具有版本控制的左右,本身不能进行工作区的操作,即正常的 add/commit等命令都是不能执行的.
  2. 裸库可以作为一个本地仓库,供给正常库使用,即正常库可以设置remote url为裸库,之后push就是向裸库提交(相当于github/gitlab这样的中央仓库的作用)
  3. 裸库一般只用于分享仓库,毕竟没人会在自己本地搞一个库让别人连,gitlab/github/云效不香吗?

--mirror

这个理解的不太深刻,从百度/google及官网的说明来看,就是将本地的所有分支都推送到远端(强制),我的简单理解就是将本地的所有分支直接覆盖远端.

与git push相比,不加mirror就只是推送某一个分支.

附:

git官网说明地址: git-scm.com/docs/git-pu…

stackoverflow问题解释: stackoverflow.com/questions/3…

个人思考总结:

git是现在开发必备的工具,但是很多时候只会用 add/commit/push等简单命令,没有深入了解其中各种参数的作用,有时候费了很多时间,其实只需要一条简单的命令就能解决.

git必须要加深理解,对开发影响太大了.