GitHubからGitLabにプロジェクトをインポートします。
インポーターを使用すると、GitHubリポジトリをGitLab.comまたは自己管理GitLabインスタンスにインポートできます。
概要
プロジェクトの以下の側面がインポートされます:
- リポジトリの説明 (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アカウント
ユーザーの照合はこの順番で行われ、いずれの方法でもユーザーが特定されない場合、アクティビティはインポートを実行しているユーザーアカウントに関連付けられます。
- 上部のナビゲーションバーから「+」をクリックし、「新規プロジェクト」を選択します。
- Importprojectタブを選択し、GitHubを選択します。
- 最初のボタンを選択し、GitHubリポジトリを一覧表示します。 GitLabアプリケーションを作成するためのGitHubのページにリダイレクトされます。
- Authorize gitlabhqをクリックします。 GitLab のインポートページに戻り、GitHub リポジトリが一覧表示されます。
- インポートするリポジトリの選択に進みます。
GitHub トークンの使用
GitHubインテグレーションを使用していない場合でも、GitHubで作成者を認証し、GitLabにリポジトリへのアクセスを許可することができます:
- こちらへhttps://github.com/settings/tokens/new
- トークンの説明を入力します。
- レポスコープを選択します。
- トークンの生成]をクリックします。
- トークンのハッシュをコピーします。
- GitLabに戻り、GitHubインポーターにトークンを提供します。
- List Your GitHub Repositoriesボタンをクリックし、GitLab がリポジトリの情報を読み込むまで待ちます。 完了すると、インポーターのページに移動するので、インポートするリポジトリを選択します。
インポートするリポジトリの選択
GitHub リポジトリへのアクセスを作成者に許可すると、GitHub インポーターページにリダイレクトされ、GitHub リポジトリが一覧表示されます。
- デフォルトでは、提案されるリポジトリの名前空間は GitHub に存在する名前と一致しますが、権限に応じて、インポートする前にこれらの名前を編集することもできます。
- 任意の数のリポジトリの横にあるImportボタンを選択するか、Import all repositories を選択します。 さらに、名前によってプロジェクトをフィルタリングすることができます。 フィルタが適用されている場合、Import all repositoriesは一致したリポジトリのみをインポートします。
- Status列には、各リポジトリのインポート状況が表示されます。 ページを開いたままにしておくと、リアルタイムで更新されます。
- リポジトリがインポートされたら、GitLab のパスをクリックして GitLab URL を開きます。
ミラーリングとパイプラインステータスの共有
GitLabの階層によっては、インポートしたプロジェクトをGitHubのコピーと同期させるためにプロジェクトのミラーリングを設定することができます。
さらに、GitHubプロジェクトインテグレーションを使えば、パイプラインステータスの更新をGitHubに送信するようにGitLabを設定することができます。
CI/CD for external repoを使用してプロジェクトをインポートした場合、上記の両方が自動的に設定されます。
自己管理インスタンスでのインポート速度の向上
大規模なプロジェクトの場合、全データのインポートに時間がかかることがあります。 必要な時間を短縮するために、以下のキューを処理するSidekiqワーカーの数を増やすことができます:
github_importer
github_importer_advance_stage
最適なエクスペリエンスを得るには、これらのキューのみを処理するSidekiqプロセス(それぞれがCPUコア数と同じ数のスレッドを実行)を少なくとも4つ持つことをお勧めします。 また、これらのプロセスは別々のサーバーで実行することをお勧めします。 8コアのサーバーを4つ持つ場合、最大32のオブジェクト(イシューなど)を並行してインポートできることになります。
リポジトリのクローン作成にかかる時間を短縮するには、(GitLabインスタンスの)Gitリポジトリを保存するディスクのネットワークスループット、CPU容量、ディスク性能(高性能SSDの使用など)を向上させます。 Sidekiqワーカーの数を増やしても、リポジトリのクローン作成にかかる時間は短縮されません。