不小心删除了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 ,我们可以通过查找这个文件,找到仓库的具体路径

了解了这些之后,下面说一下具体的仓库怎么恢复

仓库恢复方式

  1. 把仓库的备份文件拿出来,解压到一台机器上
  2. 在Bitbucket上新建一个新的仓库,名称可以和被删除的仓库一样
  3. 根据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
  4. 仓库找到后,进入这个仓库,添加remote, 推送代码 

    # 设置remote url
    git remote add origin <在第一步中新建仓库的url>
    
    # 推送git仓库(包括分支和Tag)
    git push --all origin
    git push --tags origin
    BASH


参考文档