GitHubからGitLabにプロジェクトをインポートします。

インポーターを使用すると、GitHubリポジトリをGitLab.comまたは自己管理GitLabインスタンスにインポートできます。

概要

注:これらの手順はGitLab.comのユーザーに対して機能しますが、セルフマネジメントGitLabインスタンスの管理者である場合やGitHub Enterpriseからインポートする場合は、GitHubインテグレーションを有効にする必要があります。 GitHubインテグレーションは、GitHub Enterpriseからインポートする唯一の方法です。 GitLab.comを使用している場合は、代わりに個人アクセストークンを使用してGitHubリポジトリをインポートすることもできますが、この方法はすべてのユーザーアクティビティ(イシューやプルリクエストなど)を一致するGitLabユーザーに関連付けることができないため、推奨されません。 セルフマネジメントGitLabインスタンスの管理者である場合は、GitHub Rakeタスクを使用して、Sidekiqワーカーの制約なしにGitHubからプロジェクトをインポートすることもできます。

プロジェクトの以下の側面がインポートされます:

  • リポジトリの説明 (GitLab.com & 7.7+)
  • Git リポジトリデータ (GitLab.com & 7.7+)
  • イシュー (GitLab.com & 7.7+)
  • プルリクエスト (GitLab.com & 8.4+)
  • Wiki ページ (GitLab.com & 8.4+)
  • マイルストーン (GitLab.com & 8.7+)
  • ラベル (GitLab.com & 8.7+)
  • リリースノートの説明 (GitLab.com & 8.12+)
  • プルリクエストのレビューコメント (GitLab.com & 10.2+)
  • 定期的なイシューとプルリクエストのコメント

プルリクエストやイシューへの参照は保持され(GitLab.com & 8.7+)、インポートされた各リポジトリは、可視性のレベルが制限されていない限り、可視性のレベルを維持します。

どのように動作するか

イシューやプルリクエストをインポートするとき、インポーターは GitLab インスタンスのデータベースから GitHub の作成者や担当者を探そうとします (プルリクエストは GitLab では “マージリクエスト” と呼ばれることに注意しましょう)。

この関連付けを成功させるには、リポジトリ内の GitHub 作成者と担当者が、インポート前に次のいずれかの条件を満たしている必要があります:

  • GitHubアイコンを使ってGitLabアカウントにログインしたことがあること。
  • GitLabアカウントのメールアドレスと同じプライマリメールアドレスのGitHubアカウントを持っていること。

プロジェクトで参照されているユーザーがGitLabのデータベースに見つからない場合、プロジェクト作成者(通常はインポート処理を開始したユーザー)が作成者/担当者として設定されますが、イシューには元のGitHub作成者についての注記が追加されます。

インポーターは、名前空間(グループ)が存在しない場合、新しい名前空間を作成します。 名前空間が取られている場合、リポジトリはインポート処理を開始したユーザーの名前空間の下にインポートされます。 名前空間/リポジトリ名は、適切な権限で編集することもできます。

インポーターは、公開されているプルリクエストに関連するプロジェクトのフォーク上のブランチもインポートします。これらのブランチは、GH-SHA-username/pull-request-number/fork-name/branchに似た命名スキームでインポートされます。このため、GitHub リポジトリのブランチと食い違うことがあります。

その他の技術的な詳細については、GitHub ImporterWorkingdeveloper documentation を参照してください。

インポート手順の概要については、ビデオ「Migrating fromGitHub to GitLab」をご覧ください。

GitHub リポジトリを GitLab にインポートします。

GitHubインテグレーションを使用する場合

始める前に、GitLab ユーザーにマップしたい GitHub ユーザーがどちらかを持っていることを確認してください:

  • GitHubアイコン㊧でログインしたGitLabアカウント。
  • GitHubユーザーの公開メールアドレスと一致するメールアドレスを持つGitLabアカウント

ユーザーの照合はこの順番で行われ、いずれの方法でもユーザーが特定されない場合、アクティビティはインポートを実行しているユーザーアカウントに関連付けられます。

注意:GitLabインスタンスをセルフマネジメントしている場合や、GitHub Enterpriseからインポートする場合は、GitHubインテグレーションを設定している必要があります。
  1. 上部のナビゲーションバーから「+」をクリックし、「新規プロジェクト」を選択します。
  2. Importprojectタブを選択し、GitHubを選択します。
  3. 最初のボタンを選択し、GitHubリポジトリを一覧表示します。 GitLabアプリケーションを作成するためのGitHubのページにリダイレクトされます。
  4. Authorize gitlabhqをクリックします。 GitLab のインポートページに戻り、GitHub リポジトリが一覧表示されます。
  5. インポートするリポジトリの選択に進みます。

GitHub トークンの使用

注意:個人アクセストークンを使ってプロジェクトをインポートすることは推奨されません。 GitLab.comのユーザーであれば、個人アクセストークンを使ってGitHubからプロジェクトをインポートすることができますが、この方法ではすべてのユーザーのアクティビティ(イシューやプルリクエストなど)を一致するGitLabユーザーに関連付けることはできません。 自己管理型のGitLabインスタンスの管理者である場合や、GitHub Enterpriseからインポートする場合は、個人アクセストークンを使うことはできません。 すべてのユーザーには、GitHubインテグレーション(上記)の方法を推奨します。 詳しくは、How it worksのセクションをご覧ください。

GitHubインテグレーションを使用していない場合でも、GitHubで作成者を認証し、GitLabにリポジトリへのアクセスを許可することができます:

  1. こちらへhttps://github.com/settings/tokens/new
  2. トークンの説明を入力します。
  3. レポスコープを選択します。
  4. トークンの生成]をクリックします。
  5. トークンのハッシュをコピーします。
  6. GitLabに戻り、GitHubインポーターにトークンを提供します。
  7. List Your GitHub Repositoriesボタンをクリックし、GitLab がリポジトリの情報を読み込むまで待ちます。 完了すると、インポーターのページに移動するので、インポートするリポジトリを選択します。

インポートするリポジトリの選択

GitHub リポジトリへのアクセスを作成者に許可すると、GitHub インポーターページにリダイレクトされ、GitHub リポジトリが一覧表示されます。

  1. デフォルトでは、提案されるリポジトリの名前空間は GitHub に存在する名前と一致しますが、権限に応じて、インポートする前にこれらの名前を編集することもできます。
  2. 任意の数のリポジトリの横にあるImportボタンを選択するか、Import all repositories を選択します。 さらに、名前によってプロジェクトをフィルタリングすることができます。 フィルタが適用されている場合、Import all repositoriesは一致したリポジトリのみをインポートします。
  3. Status列には、各リポジトリのインポート状況が表示されます。 ページを開いたままにしておくと、リアルタイムで更新されます。
  4. リポジトリがインポートされたら、GitLab のパスをクリックして GitLab URL を開きます。

Github importer page

ミラーリングとパイプラインステータスの共有

GitLabの階層によっては、インポートしたプロジェクトをGitHubのコピーと同期させるためにプロジェクトのミラーリングを設定することができます。

さらに、GitHubプロジェクトインテグレーションを使えば、パイプラインステータスの更新をGitHubに送信するようにGitLabを設定することができます。

CI/CD for external repoを使用してプロジェクトをインポートした場合、上記の両方が自動的に設定されます。

自己管理インスタンスでのインポート速度の向上

注:GitLabサーバーへの管理者権限が必要です。

大規模なプロジェクトの場合、全データのインポートに時間がかかることがあります。 必要な時間を短縮するために、以下のキューを処理するSidekiqワーカーの数を増やすことができます:

  • github_importer
  • github_importer_advance_stage

最適なエクスペリエンスを得るには、これらのキューのみを処理するSidekiqプロセス(それぞれがCPUコア数と同じ数のスレッドを実行)を少なくとも4つ持つことをお勧めします。 また、これらのプロセスは別々のサーバーで実行することをお勧めします。 8コアのサーバーを4つ持つ場合、最大32のオブジェクト(イシューなど)を並行してインポートできることになります。

リポジトリのクローン作成にかかる時間を短縮するには、(GitLabインスタンスの)Gitリポジトリを保存するディスクのネットワークスループット、CPU容量、ディスク性能(高性能SSDの使用など)を向上させます。 Sidekiqワーカーの数を増やしても、リポジトリのクローン作成にかかる時間は短縮されません