gitlab-repo数据恢复

Posted by 刘勇(lyonger) on 2019-11-30

背景

  • 平时负责公司的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
  • 一般我们每天凌晨进行一次备份,备份以后长成这样子:
    gitlabbak

  • 恢复步骤:

    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
    1. 找到需要恢复的repo备份文件, 比如repositories/{namespcae}/{仓库名}.bundle,下图为1547669595_2019_01_16_11.0.4_gitlab_backup解压后生成的内容。
      repo

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

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

    2. 执行备份恢复命令。注意执行完恢复以后,原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
    1. 恢复成功后如下图:
      gdc_sdc

参考文档

推荐阅读



支付宝打赏 微信打赏

赞赏一下