开启掘金成长之旅!这是我参与「掘金日新计划 · 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拉取的正常库的区别是:
- 裸库只具有版本控制的左右,本身不能进行工作区的操作,即正常的 add/commit等命令都是不能执行的.
- 裸库可以作为一个本地仓库,供给正常库使用,即正常库可以设置remote url为裸库,之后push就是向裸库提交(相当于github/gitlab这样的中央仓库的作用)
- 裸库一般只用于分享仓库,毕竟没人会在自己本地搞一个库让别人连,gitlab/github/云效不香吗?
--mirror
这个理解的不太深刻,从百度/google及官网的说明来看,就是将本地的所有分支都推送到远端(强制),我的简单理解就是将本地的所有分支直接覆盖远端.
与git push相比,不加mirror就只是推送某一个分支.
附:
git官网说明地址: git-scm.com/docs/git-pu…
stackoverflow问题解释: stackoverflow.com/questions/3…
个人思考总结:
git是现在开发必备的工具,但是很多时候只会用 add/commit/push等简单命令,没有深入了解其中各种参数的作用,有时候费了很多时间,其实只需要一条简单的命令就能解决.
git必须要加深理解,对开发影响太大了.