プロジェクトのインポートとマイグレーション

既存のプロジェクトをGitLabに取り込んだり、GitLabのプロジェクトを別の場所にコピーしたりしたい場合は、以下の方法があります:

  • 利用可能なインポーターを使って外部システムからプロジェクトをインポートします。
  • GitLab プロジェクトをマイグレーション:
    • 2つのGitLabセルフマネージドインスタンス間で。
    • セルフマネージドインスタンスとGitLab.comの双方向間。
    • 同じGitLabインスタンス内。

ソースとターゲットのタイプを問わず、GitLabプロジェクトをマイグレーションできます:

  • 直接転送によるグループのマイグレーションでは、グループ内のすべてのプロジェクトを同時にマイグレーションできます。直接転送によるプロジェクトのマイグレーションはベータ版です。この機能はまだ本番環境では使用できません。
  • ファイルエクスポートの使用。この方法では、プロジェクトを 1 つずつマイグレーションできます。インスタンス間のネットワーク接続は必要ありません。

Git リポジトリだけをマイグレーションする必要がある場合は、各プロジェクトを URL でインポートできます。しかし、この方法ではイシューやマージリクエストをインポートすることはできません。イシューやマージリクエストのようなメタデータを保持するには、次のどちらかを行います:

ファイルエクスポートを使ったマイグレーションには制限があります。自己管理から GitLab.com にマイグレーションする場合、ユーザー関連付け(コメント作成者など)はプロジェクトをインポートするユーザーに変更されます。

セキュリティ

信頼できるソースからのみプロジェクトをインポートしてください。信頼できないソースからプロジェクトをインポートすると、攻撃者が機密データを盗む可能性があります。たとえば、悪意のある.gitlab-ci.yml ファイルを含むインポートされたプロジェクトは、攻撃者にグループ CI/CD 変数を流出させる可能性があります。

GitLabのセルフマネジメント管理者は、不要なインポートソースを無効にすることで、攻撃対象領域を減らすことができます:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 設定] > [全般]を選択します。
  4. 表示とアクセス制御] を展開します。
  5. ソースのインポートまでスクロールします。
  6. 不要なインポートのチェックボックスをオフにします。

利用可能なプロジェクトインポーター

プロジェクトをインポートできます:

新規プロジェクトページから HTTP 経由で Git リポジトリをインポートすることもできます。リポジトリが大きすぎる場合、インポートがタイムアウトすることがあります。

その場合は、外部リポジトリに接続して CI/CD のメリットを得ることができます。

Subversion からのインポート

GitLabはSubversionリポジトリを自動的にGitにマイグレーションすることはできません。SubversionのリポジトリをGitに変換するのは難しいかもしれませんが、以下のようなツールがあります:

  • git svn以下のようなツールがあります。
  • reposurgeon大規模で複雑なリポジトリ向けです。

APIを使用したマイグレーション

自己管理からGitLab.comに全てのデータをマイグレーションするには、APIを活用することができます。この順番でアセットをマイグレーションします:

  1. グループ
  2. プロジェクト
  3. プロジェクト変数

一連のDockerプルとプッシュでコンテナレジストリをマイグレーションする必要があります。CIパイプラインを再実行して、ビルドのアーティファクトを取得します。

2つの自己管理GitLabインスタンス間のマイグレーション

既存のセルフマネージド GitLab インスタンスから新しいセルフマネージド GitLab インスタンスにマイグレーションするには、既存のインスタンスをバックアップして新しいインスタンスに復元します。例えば、セルフマネージドインスタンスを古いサーバーから新しいサーバーにマイグレーションするにはこの方法を使います。

作成されるバックアップはGitLabが稼働しているオペレーションシステムに依存しません。そのため、同じGitLabのバージョンがインストール可能であれば、異なるオペレーティングシステムのディストリビューションやバージョン間でリストア方法を切り替えて使用することができます。

管理者はUsers APIを使ってユーザーをマイグレーションすることができます。

プロジェクトのインポート履歴の表示

自分が作成したプロジェクトのインポートをすべて表示することができます。このリストには以下が含まれます:

  • プロジェクトが外部システムからインポートされた場合はソースプロジェクトのパス、GitLabプロジェクトがマイグレーションされた場合はインポート方法。
  • 移行先プロジェクトのパス。
  • 各インポートの開始日。
  • 各インポートのステータス。
  • エラーが発生した場合は、エラーの詳細。

プロジェクトのインポート履歴を見るには:

  1. GitLab にサインインします。
  2. 左サイドバーの上部にある「新規作成({plus})」と「新規プロジェクト/リポジトリ」を選択します。
  3. プロジェクトのインポートを選択します。
  4. 右上の「History」を選択します。
  5. 特定のインポートにエラーがある場合は、Detailsを選択するとエラーが表示されます。

履歴には、ビルトインテンプレートや カスタムテンプレートから作成されたプロジェクトも含まれます。GitLabはテンプレートから新しいプロジェクトを作成するために、URLによるリポジトリのインポートを使います。

LFS 認証

LFS オブジェクトを含むプロジェクトをインポートするとき、プロジェクトの URL ホスト (lfs.url) がリポジトリの URL ホストと異なる.lfsconfig ファイルがある場合、LFS ファイルはダウンロードされません。

プロジェクトのエイリアス

GitLab 12.1 で導入されました

GitLabリポジトリは通常、名前空間とプロジェクト名でアクセスします。しかし、頻繁にアクセスされるリポジトリをGitLabにマイグレーションする場合、プロジェクトのエイリアスを使うことで、オリジナルの名前でリポジトリにアクセスすることができます。プロジェクトエイリアスを使ってリポジトリにアクセスすることで、そのようなリポジトリのマイグレーションに伴うリスクを減らすことができます。

この機能はGit over SSHでのみ利用可能です。また、プロジェクトエイリアスを作成できるのはGitLab管理者のみで、APIを通じてのみ作成できます。詳しくはProject Aliases API documentation をご覧ください。

管理者がプロジェクトのエイリアスを作成したら、そのエイリアスを使用してリポジトリをクローンすることができます。例えば、管理者がプロジェクトhttps://gitlab.com/gitlab-org/gitlabに対してgitlab というエイリアスを作成した場合、git clone git@gitlab.com:gitlab-org/gitlab.gitの代わりにgit clone git@gitlab.com:gitlab.git を使ってプロジェクトをクローンすることができます。

グループとプロジェクトのインポートを自動化

GitLabプロフェッショナルサービスチームは、Congregateを使ってユーザー、グループ、プロジェクトのインポートAPIコールをオーケストレーションしています。Congregateを使えば、GitLabにデータをマイグレーションすることができます:

  • 他のGitLabインスタンス
  • GitHub Enterprise
  • GitHub.com
  • Bitbucket Server
  • Bitbucketデータセンター

詳細については

サポートについては、GitLabプロフェッショナルサービスと有料契約を結ぶ必要があります。

トラブルシューティング

インポートしたリポジトリにブランチがありません。

インポートしたリポジトリにソースリポジトリのすべてのブランチが含まれていない場合:

  1. 環境変数 IMPORT_DEBUG=trueを設定します。
  2. 別のグループ、サブグループ、プロジェクト名でインポートを再試行します。
  3. それでも見つからないブランチがある場合は、importer.log (たとえば、jq) を調べてください。