ベアリポジトリのインポート

RakeタスクはベアリポジトリをGitLabインスタンスにインポートするために利用できます。

注意してください:

  • プロジェクトのオーナーが最初の管理者となります。
  • グループはサブグループも含め、必要に応じて作られます。
  • グループのオーナーが最初の管理者になります。
  • 既存のプロジェクトはスキップされます。
  • ハッシュ化されたストレージ内のプロジェクトはスキップされる可能性があります。 詳細については、ハッシュ化されたストレージからベアリポジトリをインポートするを参照してください。
  • 既存のgitリポジトリはディスクから移動されます(元のパスから削除されます)。

ベアリポジトリをGitLabインスタンスにインポートするには:

  1. Git リポジトリをインポートするための新しいフォルダを作成します。 新しいフォルダには、Git ユーザーの所有権と、Git ユーザーとそのグループの読み取り/書き込み/実行アクセス権が必要です:

    sudo -u git mkdir -p /var/opt/gitlab/git-data/repository-import-<date>/new_group
    
  2. この新しく作成されたフォルダの中に、あなたのベアリポジトリをコピーしてください。 注意:

    • サブフォルダにある.git リポジトリは、プロジェクトとしてインポートされます。
    • グループは必要に応じて作成され、これらはネストされたフォルダになる可能性があります。

    例えば、リポジトリを/var/opt/gitlab/git-data/repository-import-<date>にコピーし、リポジトリA をグループG1G2の下に置く必要がある場合、それらのフォルダの下に/var/opt/gitlab/git-data/repository-import-<date>/G1/G2/A.gitを作成する必要があります。

    sudo cp -r /old/git/foo.git /var/opt/gitlab/git-data/repository-import-<date>/new_group/
    
    # Do this once when you are done copying git repositories
    sudo chown -R git:git /var/opt/gitlab/git-data/repository-import-<date>
    

    foo.git は、git ユーザーと gitユーザーグループによって所有されている必要があります。

    ソースからのインストールを使用している場合は、/var/opt/gitlab//home/gitに置き換えてください。

  3. インストールの種類に応じて、以下のコマンドを実行してください:

    • オムニバス・インストール
    sudo gitlab-rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>']
    
    • ソースからのインストール このコマンドを実行する前に、GitLabがインストールされているディレクトリに移動する必要があります:
    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>'] RAILS_ENV=production
    

出力例

Processing /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.git
 * Using namespace: a/b/c
 * Created blah (a/b/c/blah)
 * Skipping repo  /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.wiki.git
Processing /var/opt/gitlab/git-data/repository-import-1/abcd.git
 * Created abcd (abcd.git)
Processing /var/opt/gitlab/git-data/repository-import-1/group/xyz.git
 * Using namespace: group (2)
 * Created xyz (group/xyz.git)
 * Skipping repo /var/opt/gitlab/git-data/repository-import-1/@shared/a/b/abcd.git
[...]

ハッシュ化されたストレージからのベアリポジトリのインポート

レガシーストレージのプロジェクトは、GitLab でのプロジェクトのフルパスを反映したディレクトリ構造を持っています。 この情報は、ベアリポジトリインポーターがプロジェクトを適切な場所にインポートするために活用されます。 各プロジェクトとその親の名前空間には、意味のある名前が付けられています。

しかし、ハッシュ化されたストレージにあるプロジェクトのディレクトリ構造には、この情報は含まれません。 これはさまざまな理由で有益であり、特にパフォーマンスとデータのインテグリティが向上します。 詳細については、リポジトリ・ストレージの種類を参照してください。

インポート可能なリポジトリはGitLabのバージョンによって異なります。

GitLab 10.3 以前

ハッシュ化されたストレージからのベアリポジトリのインポートはサポートされていません。

GitLab 10.4 以降

ハッシュ化されたストレージからのベアリポジトリのインポートをサポートするために、GitLab 10.4以降では、Gitリポジトリの設定ファイルの特別なセクションに、各リポジトリと一緒に完全なプロジェクトパスを保存します。 このセクションは次のようなフォーマットになっています:

[gitlab]
  fullpath = gitlab-org/gitlab

しかし、既存のリポジトリはこのパスを含むように移行されませんでした。

GitLab 10.4 以降でリポジトリに以下のイベントが発生した場合、ベアリポジトリはインポート可能です:

  • 作成
  • ハッシュ化されたストレージに移行
  • 名称変更
  • 別のネームスペースに移動
  • 先祖の名前を変更
  • 祖先が別の名前空間に移動

GitLab 10.4からGitLab 11.6では、ベアリポジトリはインポートできません

  • GitLab 10.3以前のバージョンで作成されています。
  • GitLab 10.4からGitLab 11.6では、名前の変更、転送、ハッシュ化されたストレージへの移行は行われませんでした。
  • GitLab 10.4からGitLab 11.6では、その先祖の名前空間はリネームも転送もされませんでした。

GitLab 11.6以降、すべてのベアリポジトリがインポート可能になりました。

GitLab 10.4からGitLab 11.6へ)手動でリポジトリを移行するには、Railsコンソールを使います。 Railsコンソールセッションで、以下を実行してプロジェクトを移行します:

project = Project.find_by_full_path('gitlab-org/gitlab')
project.write_repository_config

Railsコンソールセッションで以下を実行し、ネームスペースのすべてのプロジェクトを移行します(ネームスペースにプロジェクトが1000個以上ある場合は時間がかかる場合があります):

namespace = Namespace.find_by_full_path('gitlab-org')
namespace.send(:write_projects_repository_config)