2023年4月21日金曜日

Gitlabでリポジトリのデータを直接操作して別のGitlabにプロジェクトとしてインポートする方法

Gitlabでリポジトリのデータを直接操作して別のGitlabにプロジェクトとしてインポートする方法

概要

基本はプロジェクトのインポート/エクスポート機能を使います
それができない場合に直接リポジトリファイルを圧縮して別の Gitlab に転送することでプロジェクトとしてインポートする方法を紹介します

環境

  • Gitlab-ee 15.7.8

対象のリポジトリを圧縮

まずは対象のリポジトリのデータを圧縮してインポート先のサーバに転送します
リポジトリの容量が小さい場合は圧縮なしで直接転送しても OK です
Gitlabの場合はリポジトリ名はハッシュ化されています

また以下の場合はカレントディレクトリに圧縮ファイルが作成されるのでカレントディレクトリのディスクの容量が十分に足りていることも確認しましょう

  • tar -zcvf repo.tar.gz /path/to/gitlab/opt/git-data/repositories/@hashed/19

圧縮したリポジトリの転送

scp でも rsync でも何でも OK です
インポート先の Gitlab に転送しましょう

  • scp repo.tar.gz 192.168.100.2:~

インポート先のGitlabで展開する

転送したファイルを展開しましょう

以下の場合は圧縮したパスの相対パスとして展開されます ./path/to/gitlab/opt/git-data/repositories/@hashed/19 に展開されます

  • tar xvzf data.tar.gz

空のプロジェクトを作成する

インポート先の Gitlab で空のプロジェクトを作成しましょう

作成した空のプロジェクトにリポジトリの情報をコピーする

あとは展開したリポジトリの除法を直接コピーすれば OK です
HEAD と config というメタデータファイルがあるのでそれは一度退避しておきます

4e074xxx は空のプロジェクトのハッシュ値になります

  • cp /path/to/gitlab/opt/git-data/repositories/@hashed/4e/07/4e07xxx.git/config .
  • cp /path/to/gitlab/opt/git-data/repositories/@hashed/4e/07/4e07xxx.git/HEAD .

退避できたらインポートするリポジトリのデータは上書きコピーします

  • cp -ipr /path/to/gitlab/opt/git-data/repositories/@hashed/19/58/1958xxx.git/* /path/to/gitlab/opt/git-data/repositories/@hashed/4e/07/4e07xxx.git/

リポジトリのデータが上書きできたら退避したメタデータを元に戻します

  • cp HEAD /path/to/gitlab/opt/git-data/repositories/@hashed/4e/07/4e07xxx.git/
  • cp config /path/to/gitlab/opt/git-data/repositories/@hashed/4e/07/4e07xxx.git/

動作確認

あとはインポート先の Gitlab の UI から確認しましょう
空のプロジェクト配下に転送したデータが表示されていることを確認しましょう

最後に

Gitlab 以外のリポジトリに転送する場合はファイルだけ転送すればいいのですが Gitlab の場合は postgres 側にデータがないと UI などでは表示されないので一度空のプロジェクトを作成するのがポイントになります

参考サイト

0 件のコメント:

コメントを投稿