git仓库迁移

git 获取所有仓库代码_github

公司在两市的研发中心存在网络隔离,使用各自内网部署的gitlab仓库;
A迁移到B,以往都是直接下载代码,然后导入;这样有个缺陷,历史的变更提交记录和分支情况都丢失了;然而提交记录是相当重要的资料,用于回退和历史审计等作用。否则当出现问题时,无法定位何时引入的,也无法追责找到责任人;

单仓库迁移

参看:Duplicating a repository https://docs.github.com/en/repositories/creating-and-managing-repositories/duplicating-a-repository

git 获取所有仓库代码_服务器_02

裸仓库:
一般情况下是作为远端的中心仓库而存在的,可以clone和push,但裸仓库没有工作区;裸仓库是个以.git为后缀的文件夹;(这也是平时我们克隆链接OLD.git路径后缀的由来)

A打开git bash,克隆仓库为裸仓库,发给B市小伙伴;

git clone --bare https://github.com/USER/OLD.git

B市小伙伴收到,文件转入内网:

  1. 进入老项目的裸仓库目录 cd OLD.git 打开git bash
  2. 移除老项目的地址替换成新项目 git remote set-url --push origin NEW.git (NEW.git 为新项目的git地址)
  3. 将镜像推到远程 git push --mirror //这一步需要输入新的git的账号和密码

全部仓库迁移

这个方法有个缺陷,两边需要是相同版本的gitlab;相当于重新安装gitlab然后导入全部仓库;
【旧服务器】
【gitlab迁移搬家】操作记录
原服务器,导出备份文件:

sudo gitlab-rake gitlab:backup:create

/var/opt/gitlab/backups目录下会有一个【1672220301_2022_12_28_11.9.9_gitlab_backup.tar】的压缩包
它是gitlab的全量完整备份;前缀是创建时间;该命令会备份gitlab仓库/数据库/用户/用户组/用户密钥/权限等信息。

把敏感信息文件也导出:(这几个文件包含敏感信息,需要单独备份)

cd /etc/gitlab
/etc/gitlab/gitlab.rb 【配置文件】
/etc/gitlab/gitlab.json
/var/opt/gitlab/nginx/conf【nginx配置文件】
/etc/postfix/main.cfpostfix【邮件配置文件】

【新服务器】
【安装gitlab】

rpm -ivh gitlab-ce-11.9.9-ce.0.el6.x86 64.rpm

【修改配置:ip和端口】

vim /etc/gitlab/gitlab.rb
external_url 'http://{IP}:{PORT}'

【重载配置】

gitlab-ctl reconfigure

如果运行到/sv/redis卡住了(如下),新开一个终端连接执行:

#############
 create symlink at /opt/gitlab/service/redis to /opt/gitlab/sv/redis
       * ruby_block[wait for redis service socket] action run
#############

cd /opt/gitlab/embedded/bin/
sh runsvdir-start &

还原备份包
把备份包复制过去新服务器对应自录:

scp 1672220301_2022_12_28_11.9.9_gitlab_backup.tar root@{IP}:/var/opt/gitlab/backups/

把敏感信息文件丢过去新服务器对应目录:

cd /etc/gitlab
/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab.json

文件夹授权:

chown -R git:git /var/opt/gitlab/backups/

执行备份文件恢复:一路yes
!!!【注意:恢复是会先删除新服务器上所有gitlab数据的】

gitlab-rake gitlab:backup:restore RAILS ENV=production BACKUP=1672220301_2022_12_28_11.9.9

Unpacking backup …done
Before restoring the database,we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)?
……
2023-01-17 14:37:52 +0800 --done
This task will now rebuild the authorized keys file.
You will lose any data stored in the authorized keys file.
Do you want to continue (yes/no)? yes
……

【重载配置】
gitlab-ctl reconfigure

【童启gitlab】
gitlab-ctl restart

【check检香】
gitlab-rake gitlab:check SANITIZE=true


其他备用命令:

【卸载gitlab】
1.停止gitlab服务
gitlab-ctl stop

2.卸载gitlab (社区版)
rpm -e gitlab-ce

3.查看gitlab讲程
ps aux | grep gitlab

4.杀掉gitlab service进程,该进程与runsvdir相关 (带有好多……的进程)
kill -9 xxxx
其实就是强杀掉/opt/gitlab/service进程

5.删除残留文件
find / -name gitlab
根据上面列出来的清理下目录
rm -rf /etc/gitlab
rm -rf /opt/gitlab
rm -rf /log/gitlab
rm -rf /var/opt/gitlab
rm -rf /var/log/gitlab
rm -rf /run/gitlab