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仓库迁移及Q&A

操作步骤:

在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时,有下面的报错:

git仓库迁移及Q&A

原因是:权限问题,操作用户无master分支的代码提交权限。分配权限后,需要重新clone下代码,再push就成功了;