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 10月 21 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 10月 21 22:50 HEAD -rw-r--r-- 1 takuyais takuyais 84 10月 21 22:50 config -rw-r--r-- 1 takuyais takuyais 73 10月 21 22:50 description lrwxrwxrwx 1 takuyais takuyais 47 10月 21 22:50 hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks drwxr-xr-x 2 takuyais takuyais 4.0K 10月 21 22:50 hooks.old.1445435429 drwxr-xr-x 2 takuyais takuyais 4.0K 10月 21 22:50 info drwxr-xr-x 7 takuyais takuyais 4.0K 10月 21 22:50 objects drwxr-xr-x 4 takuyais takuyais 4.0K 10月 21 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 10月 21 23:08 . drwxr-xr-x 5 takuyais takuyais 4.0K 10月 21 23:08 .. drwxr-xr-x 8 takuyais takuyais 4.0K 10月 21 23:08 .git -rw-r--r-- 1 takuyais takuyais 4 10月 21 23:08 README.md
上記のコマンドでやっている事は次のとおりです。
- バックアップファイルのtarballを任意のディレクトリに展開します。
- 展開されたファイルの
repositories
フォルダ以下にGitリポジトリのファイルがあります。目的のリポジトリはrepositories/[namespace]/[project_path].bundle
というファイル名のtarballになっているため、これを任意のディレクトリに展開します。 - 展開されたリポジトリはベアリポジトリなので、任意のディレクトリにクローンします。
ポイントは、バックアップされたリポジトリのファイルは拡張子が.bundle
ですがGitのバンドルファイルではなくtarballであるという点です。(GitLabのバージョン8.0.5時点)
補足事項
- GitLab CEでリポジトリをバックアップするコマンドを定義しているのはココです。
- 理由は分かりませんが拡張子
.bundle
のファイル名でtarballを作成しています。 - この処理がバックアップコマンドの中で呼ばれます。
- 理由は分かりませんが拡張子
- プロジェクトのwikiはバンドルファイルで作成しています。
- リストア処理もGitリポジトリはtarball、wikiはバンドルファイルとして処理しています。