背景
- 平时负责公司的gitlab平台,今天有一位同事不小心删除了几十个repo,要求恢复,泪奔,今天简单的整理一下恢复的思路。
恢复方式
人肉方式
- 此方式依赖于提交者本地有保存最新的所有代码,恢复方式简单, 关键是要找到最后一位提交者。多人协作到环境下,挨个去问也是挺蛋碎的。
- 创建同名repo
- 最后一位提交者执行:
1 | # 推送本地所有分支到远端 |
bundle方式
- gitlab有一个自带的bundle工具可以进行仓库备份,命令如下:
1 | cd ~/gitlab |
-
一般我们每天凌晨进行一次备份,备份以后长成这样子:
-
恢复步骤:
- 定位gitlab仓库存储的位置,一般参考gitlab的
docker-coompose.yml
文件。 - 进入备份文件夹,解压备份。
1
2cd /home/data/backups/
tar xf 1526230868_2019_01_17_10.1.4_gitlab_backup.tar-
找到需要恢复的repo备份文件, 比如repositories/{namespcae}/{仓库名}.bundle,下图为
1547669595_2019_01_16_11.0.4_gitlab_backup
解压后生成的内容。
-
解压bundle备份,解压后为{仓库名}.git,bundle命令可以参考:https://git-scm.com/docs/git-bundle
1
git clone --mirror repositories/{namespcae}/{仓库名}.bundle
-
把上面解压的{仓库名}.git文件放入到临时目录
repository-import-20190118/{namespcae}
-
执行备份恢复命令。注意执行完恢复以后,原repository-import-20190118/{namespcae}/{仓库名}.git文件会被自动删除。
1
2
3
4sudo 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- 恢复成功后如下图:
- 定位gitlab仓库存储的位置,一般参考gitlab的
参考文档
赞赏一下