gitlab-repo数据恢复

背景

  • 平时负责公司的gitlab平台,今天有一位同事不小心删除了几十个repo,要求恢复,泪奔,今天简单的整理一下恢复的思路。

恢复方式

人肉方式

  • 此方式依赖于提交者本地有保存最新的所有代码,恢复方式简单, 关键是要找到最后一位提交者。多人协作到环境下,挨个去问也是挺蛋碎的。
  1. 创建同名repo
  2. 最后一位提交者执行:
    1
    2
    3
    4
    # 推送本地所有分支到远端
    git push --all origin
    # 推送本地所有tag到远端
    git push --tags origin

bundle方式

  • gitlab有一个自带的bundle工具可以进行仓库备份,命令如下:

    1
    2
    cd ~/gitlab
    /usr/local/bin/bundle exec rake gitlab:backup:create RAILS_ENV=production
  • 一般我们每天凌晨进行一次备份,备份以后长成这样子:
    请在这里输入图片描述

  • 恢复步骤:

    1. 定位gitlab仓库存储的位置,一般参考gitlab的docker-coompose.yml文件。
    2. 进入备份文件夹,解压备份。

      1
      2
      cd /home/data/backups/
      tar xf 1526230868_2019_01_17_10.1.4_gitlab_backup.tar
    3. 找到需要恢复的repo备份文件, 比如repositories/{namespcae}/{仓库名}.bundle,下图为1547669595_2019_01_16_11.0.4_gitlab_backup解压后生成的内容。
      请在这里输入图片描述

    4. 解压bundle备份,解压后为{仓库名}.git,bundle命令可以参考:https://git-scm.com/docs/git-bundle

      1
      git clone --mirror repositories/{namespcae}/{仓库名}.bundle
    5. 把上面解压的{仓库名}.git文件放入到临时目录repository-import-20190118/{namespcae}

    6. 执行备份恢复命令。注意执行完恢复以后,原repository-import-20190118/{namespcae}/{仓库名}.git文件会被自动删除。

      1
      2
      3
      4
      sudo chown -R git:git repository-import-20190118/
      su - git
      cd ~/gitlab
      /usr/local/bin/bundle exec rake gitlab:import:repos['/home/git/repositories/repository-import-20190118'] RAILS_ENV=production
    7. 恢复成功后如下图:
      请在这里输入图片描述

参考文档

-------------本文结束感谢您的阅读-------------