GitLab のバックアップファイルから Git リポジトリを取得する

何が出来るの?

GitLabでsudo gitlab-rake gitlab:backup:createを実行すると、既定では/var/opt/gitlab/backups[TIMESTAMP]_gitlab_backup.tarというファイル名でバックアップが作られます。このバックアップから直接Gitリポジトリを取得します。

やり方

コマンドだけ並べると次のとおりです。

$ ls -lh
合計 100K
-rwxr-xr-x 1 takuyais takuyais 100K 1021 22:59 1445435571_gitlab_backup.tar
$ mkdir 1445435571_gitlab_backup
$ tar -xvf 1445435571_gitlab_backup.tar -C 1445435571_gitlab_backup
repositories/
repositories/takuyais/
repositories/takuyais/your-awesome-project.bundle
db/
db/database.sql.gz
uploads/
backup_information.yml
$ mkdir your-awesome-project.git
$ tar -xf 1445435571_gitlab_backup/repositories/takuyais/your-awesome-project.bundle -C your-awesome-project.git/
$ ls -lh your-awesome-project.git/
合計 28K
-rw-r--r-- 1 takuyais takuyais   22 1021 22:50 HEAD
-rw-r--r-- 1 takuyais takuyais   84 1021 22:50 config
-rw-r--r-- 1 takuyais takuyais   73 1021 22:50 description
lrwxrwxrwx 1 takuyais takuyais   47 1021 22:50 hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks
drwxr-xr-x 2 takuyais takuyais 4.0K 1021 22:50 hooks.old.1445435429
drwxr-xr-x 2 takuyais takuyais 4.0K 1021 22:50 info
drwxr-xr-x 7 takuyais takuyais 4.0K 1021 22:50 objects
drwxr-xr-x 4 takuyais takuyais 4.0K 1021 22:50 refs
$ git clone your-awesome-project.git/ your-awesome-project
Cloning into 'your-awesome-project'...
done.
$ ls -lha your-awesome-project
合計 16K
drwxr-xr-x 3 takuyais takuyais 4.0K 1021 23:08 .
drwxr-xr-x 5 takuyais takuyais 4.0K 1021 23:08 ..
drwxr-xr-x 8 takuyais takuyais 4.0K 1021 23:08 .git
-rw-r--r-- 1 takuyais takuyais    4 1021 23:08 README.md

上記のコマンドでやっている事は次のとおりです。

  1. バックアップファイルのtarballを任意のディレクトリに展開します。
  2. 展開されたファイルのrepositoriesフォルダ以下にGitリポジトリのファイルがあります。目的のリポジトリrepositories/[namespace]/[project_path].bundleというファイル名のtarballになっているため、これを任意のディレクトリに展開します。
  3. 展開されたリポジトリはベアリポジトリなので、任意のディレクトリにクローンします。

ポイントは、バックアップされたリポジトリのファイルは拡張子.bundleですがGitのバンドルファイルではなくtarballであるという点です。(GitLabのバージョン8.0.5時点)

補足事項