git仓库迁移及Q&A
git仓库迁移方法:
要求:
把A仓库(10.1.1.1/registry.git)迁移到 新库B库(10.1.1.2/registry.git);
方案一:(迁移了历史提交记录)
操作前提:
在库迁移之前要关闭master角色的操作权限:
登录仓库的git:仓库--settings-Repository,在Protected Branches下,选择最后被保护的角色,点unprotected
操作方法:
操作步骤:
在git bash(windows打开)中,切换到一个空间大的目录(例如cd e:)
第一步:在本地clone旧库的内容
git clone --bare http://username:[email protected]:port/A.git 注意如果password中含有@,则http://ip:port/A.git 根据提示输入用户名和密码;
第二步:完成后,该目录下就会生成一个A.git,切换到该目录下:
cd A.git/
第三步:把内容推到新库B库中:
git push --mirror http://username:[email protected]:port/B.git 注意如果password中含有@,则http://ip:port/A.git 根据提示输入用户名和密码;
这样在登录B库的git,就可以查看到A库中的所有内容(所有分支、及提交记录都会有)
方案二:(弊端:历史提交记录未迁移)
1、在目录1中,git clone A库,在目录2中,git clone B库,清空B库,commit后,把A库同样分支的内容,拷贝到B库同样分支,在B库,add--》commit,即成功;
2、如果有多个分支,分别对A、B库,checkout到新分支,把A库分支内容拷贝到B库中,在B库,add--》commit,即成功;
弊端:登录B库发现,没有A库的历史提交记录,如果想回退版本,就无法实现
方案一遇到问题:
迁库时报错是:pre-receive hook declined;
在git push --mirror http://username:[email protected]:port/B.git时,有下面的报错:
原因是:权限问题,操作用户无master分支的代码提交权限。分配权限后,需要重新clone下代码,再push就成功了;