gitlab服务器在没有备份的情况下宕机,如何恢复项目代码
第一步:复制旧服务器的代码仓库数据
将宕机的gitlab服务器硬盘挂载到其他服务器,打开挂载的磁盘,找到gitlab代码仓库目录
/run/media/root/c6e4af86-0ca5-4841-8593-914811388435/var/opt/gitlab/git-data
黄色部分是磁盘挂载的目录,后面的 /var/opt/gitlab/git-data 这个是gitlab代码仓库的目录
打包 git-data 文件夹
tar -cvf git-data.tar git-data
拷贝 git-data.tar 到新的 github服务器,并解压到新的服务器
tar -xvf git-data.tar git-data333
第二步:提取代码库中的项目信息
git-data下的目录名称是hash后的数字,已经看不出哪个文件夹是哪个项目的数据,但是文件夹下有个config文件,打开可以看到项目信息
fullpath后面的信息就是 项目的组名称 / 项目的项目名称,那接下来只需要遍历每个文件夹,去读取文件夹下的config文件,就能获取到所有项目信息
1、提取所有git文件夹目录
dir /b /s *.git > 2.txt
2、使用java代码遍历代码仓库中的所有文件夹,提取所有config文件中的项目信息
public static void main(String[] args) throws IOException { String path1 = "E:\\tools\\github\\git-data\\repositories\\@hashed"; String fileName = "\\config"; for (String path2 : path2Arr) { List<String> lines = Files.readAllLines(Paths.get(path1 + path2 + fileName), StandardCharsets.UTF_8); lines.forEach(line -> { if (line.contains("fullpath = ")) { line = line.replaceAll("\\s", "").replace("fullpath=", ""); System.out.print(path2 + "\t"); System.out.println(line); } }); } }
这样就得到文件夹对应的项目信息了
第三步:搭建新的 github 服务器
在新的服务器上,安装旧服务器上相同版本的 github (避免版本不同,数据无法镜像的问题)
# 准备工作 sudo yum update -y sudo yum install curl openssh-server openssh-clients postfix cronie -y curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # 安装服务 sudo yum install gitlab-ce -y # 修改gitlab访问地址 sudo vim /etc/gitlab/gitlab.rb # 重新加载配置文件 sudo gitlab-ctl reconfigure # 启动服务 sudo gitlab-ctl start # 关闭服务 sudo gitlab-ctl stop
第四步:在新的gitlab服务器中添加空的项目
根据提取到的 组名称 和 项目名称 在新的gitlab中 创建组、创建空的项目,并把创建的空项目的git url 复制到表格中
这样就得到了代码仓库文件夹和空项目url一一对应的数据
第五步:使用镜像功能恢复GitHub数据
遍历表格中的数据,执行下方命令,将代码仓库文件夹中的数据镜像到新的gitlab空项目中,至此,gitlab数据的恢复就完成了
cd /var/opt/gitlab/git-data333/repositories/@hashed/代码仓库文件夹
git push --mirro 空项目url