不小心删除了Bitbucket上的一个仓库,怎么办?
最简单的办法是让在Bitbutcket上重新建一个新的仓库,让有这个Git仓库的用户重新 push --all 一次
但不幸的是,如果被删除的是一个不活跃的仓库,没有人有这个仓库最新的记录,这时候就需要从每日备份找到仓库了
在介绍上面这个操作之前,我们先了解一下bitbucket的仓库存储路径和结构
Bitbucket的仓库存储路径和结构
假设Bitbucket的home目录为 $BITBUCKET_HOME , 默认是 /var/atlassian/application-data/Bitbucket
仓库的路径为:$BITBUCKET_HOME/shared/data/repositories
在仓库的目录下是 <仓库id> /<仓库内容> , 仓库id是 仓库的数字编号, 在仓库id的目录下,有一个 repository-config 的文件 , 包括project key 和 repo 的 slug, 内容如下
#>***********************************************
# THIS FILE IS MAINTAINED BY ATLASSIAN BITBUCKET
# IT CONTAINS NO USER-SERVICEABLE PARTS.
#>***********************************************
[bitbucket]
hierarchy = <hierarchy id>
project = <project key>
repository = <repository slug>
CODE
仓库已经删除了,就没有办法从数据库中找到仓库的id了。如果知道被删除仓库的url或者project key ,我们可以通过查找这个文件,找到仓库的具体路径
了解了这些之后,下面说一下具体的仓库怎么恢复
仓库恢复方式
- 把仓库的备份文件拿出来,解压到一台机器上
- 在Bitbucket上新建一个新的仓库,名称可以和被删除的仓库一样
根据project key 定位到仓库目录
# 设置数据文件路径
BITBUCKET_HOME=<解压出来的备份文件路径>
# 查找仓库, 可以根据 repository-config 文件的内容来查找,这个例子使用project key
find $BITBUCKET_HOME/shared/data/repositories -mindepth 2 -maxdepth 2 -type f -name repository-config -print0 | xargs -0 grep -i "project = <项目路径>"
BASH
仓库找到后,进入这个仓库,添加remote, 推送代码
# 设置remote url
git remote add origin <在第一步中新建仓库的url>
# 推送git仓库(包括分支和Tag)
git push --all origin
git push --tags origin
BASH
参考文档