Bitbucket Serverから移行する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Bitbucket ServerからGitLabにプロジェクトをインポートします。
Bitbucket Serverインポーターは、Bitbucket Serverからアイテムのサブセットをインポートします。
| Bitbucket Serverのアイテム | インポート済み |
|---|---|
| リポジトリの説明 | |
| Gitリポジトリデータ | |
| コメント、ユーザーメンション、レビュアー、マージイベントを含むプルリクエスト | |
| LFSオブジェクト | |
| コード上のコメント1 | |
| スレッド2 | |
| プロジェクトフィルター3 | |
| Markdownの添付ファイル | いいえ |
| タスクリスト | いいえ |
| 絵文字リアクション | いいえ |
| プルリクエストの承認 | いいえ |
| プルリクエストの承認ルール | いいえ |
補足説明:
- GitLabでは、任意のコード行へのコメントは許可されていません。範囲外のBitbucketコメントは、マージリクエストのコメントとして挿入されます。
- 複数のスレッドレベルは1つのスレッドに統合され、引用は元のコメントの一部として追加されます。
- プロジェクトのフィルタリングはあいまい検索をサポートしていません。先頭が一致する文字列または完全一致の文字列のみがサポートされています。
インポーターのワークフロー
Bitbucket Serverインポーターは、GitLab.comとGitLab Self-Managedのユーザーコントリビュートの移行後マッピングをサポートしています。このインポーターは、マッピングの代替の方法もサポートしています。
Bitbucket Serverのアイテムがインポートされる場合は、以下のとおりとなります:
- リポジトリの公開アクセスは保持されます。リポジトリがBitbucketで非公開の場合、GitLabでは非公開として作成されます。
- インポートされたマージリクエストとコメントには、GitLabでインポート済みバッジが付いています。
クローズまたはマージされたプルリクエストがインポートされる際、リポジトリに存在しないコミットSHAは、プルリクエストにコミットが紐付けられるように、Bitbucket Serverからフェッチされます:
- ソースコミットSHAは、
refs/merge-requests/<iid>/head形式で参照として保存されます。 - ターゲットコミットSHAは、
refs/keep-around/<SHA>形式で参照として保存されます。
ソースコミットがリポジトリに存在しない場合、代わりにコミットメッセージにSHAを含むコミットが使用されます。
インポート時間を見積もる
Bitbucket Serverからのインポートはそれぞれ異なるため、実行するインポートの所要時間に影響します。ただし、インポート時間を見積もる際の参考として、以下のデータで構成されるプロジェクトのインポートには約8時間かかる可能性があります:
- 13,000件のプルリクエスト
- 7,000個のタグ
- 500 GiBのリポジトリ
前提条件
- Bitbucket Serverは、GitLabインスタンスからアクセスできる必要があります。Bitbucket ServerのURLは、GitLabが実行されているネットワーク上で、パブリックに解決できるか、アクセスできる必要があります。
- Bitbucket Serverのインポート元を有効にする必要があります。無効な場合は、GitLab管理者に有効にするように依頼してください。GitLab.comではデフォルトで有効になっています。
- メンテナーまたはオーナーロールをインポート先グループに設定する必要があります。
- 管理者アクセス権を持つBitbucket Server認証トークンが必要です。管理者アクセス権がない場合、一部のデータはインポートされません。
Bitbucket Serverリポジトリをインポートする
Bitbucket Serverリポジトリをインポートするには、以下の手順に従います:
- GitLabにサインインします。
- 右上隅で、新規作成( )と新規プロジェクト/リポジトリを選択します。
- プロジェクトをインポートを選択します。
- Bitbucket Serverを選択します。
- Bitbucketにサインインし、GitLabにBitbucketアカウントへのアクセスを許可します。
- インポートするプロジェクトを選択するか、すべてのプロジェクトをインポートします。プロジェクトを名前でフィルタリングし、各プロジェクトをインポートするネームスペースを選択できます。
- プロジェクトをインポートするには、以下の手順に従います:
- 初めての場合は、インポートを選択します。
- 2回目以降は、再インポートを選択します。新しい名前を指定し、もう一度再インポートを選択します。再インポートすると、ソースプロジェクトの新しいコピーが作成されます。
代替のマッピング方法
bitbucket_server_user_mapping機能フラグを無効にして、インポートにおける代替のユーザーコントリビュートマッピング方法を使用できます。
GitLab.comへのインポートでは、代わりに移行後の方法を使用する必要があります。
この機能フラグによって、この機能の可用性が制御されます。ただし、この機能フラグはお勧めしません。また、移行をGitLab.comに移行する場合は使用できません。このマッピング方法で見つかった問題が修正される可能性は低いです。代わりに、これらの制限がない移行後マッピング方法を使用してください。
詳細については、イシュー512213を参照してください。
代替方法を使用する場合、インポーターはBitbucket ServerユーザーのメールアドレスとGitLabユーザーデータベース内の確認済みのメールアドレスを照合しようとします。該当するユーザーが見つからない場合は以下のとおりとなります:
- 代わりにプロジェクト作成者が使用されます。インポーターは、元の作成者を示すメモをコメントに追加します。
- プルリクエストのレビュアーについては、レビュアーは割り当てられません。
- プルリクエストの承認者については、承認は追加されません。
プルリクエストの説明とノートのメンションは、ユーザーのメールアドレスを使用して、Bitbucket Serverのユーザープロファイルと照合されます。同じメールアドレスを持つユーザーがGitLabで見つからない場合、メンションは静的になります。ユーザーが照合されるには、プロジェクトへの読み取りアクセスを提供するGitLabロール以上を持っている必要があります。
プロジェクトが公開されている場合、GitLabはプロジェクトに招待されたユーザーのみを照合します。
インポーターは、新しいネームスペース(グループ)が存在しない場合に作成します。ネームスペースが使用されている場合、リポジトリはインポートプロセスを開始したユーザーのネームスペースの下にインポートされます。
トラブルシューティング
次のセクションでは、発生する可能性のある問題の解決策について説明します。
一般
GUIベースのインポートツールが機能しない場合は、以下を試すことができます:
- インポートAPI Bitbucket Serverのエンドポイントを使用します。
- リポジトリのミラーリングをセットアップする。詳細なエラー出力が提供されます。
Bitbucket Cloudのトラブルシューティングセクションを参照してください。
LFSオブジェクトがインポートされない
プロジェクトのインポートが完了してもLFSオブジェクトをダウンロードまたはクローンできない場合は、特殊文字を含むパスワードまたはパーソナルアクセストークンを使用している可能性があります。詳細については、イシュー337769を参照してください。
無効/未解決のホストアドレスが原因でインポートが失敗する、またはインポートURLがブロックされる
Bitbucketサーバーへの初期接続が成功したにもかかわらず、Importing the project failed: Import URL is blockedのようなエラーメッセージでプロジェクトのインポートが失敗する場合、Bitbucketサーバーまたはリバースプロキシが正しく設定されていない可能性があります。
この問題を解決するには、プロジェクトAPIを使用して新しく作成されたプロジェクトを確認し、プロジェクトのimport_url値を見つけます。
この値は、インポートに使用するためにBitbucket Serverから提供されるURLを示します。このURLが公開的に解決できない場合、解決できないアドレスエラーが発生する可能性があります。
この問題を修正するには、プロキシサーバーがURLの構築と使用に影響を与える可能性があるため、Bitbucket Serverがプロキシサーバーを認識していることを確認してください。詳細については、proxy and secure Bitbucketを参照してください。
インポートがJSON::NestingErrorで失敗しました
プロジェクトのインポートが、JSON::NestingErrorを含むエラーメッセージで失敗する場合、Bitbucket Serverからの応答には、max_http_response_json_depth設定を超える深くネストされたオブジェクトが含まれています。
この問題を解決するには、送信リクエストからのJSON HTTP応答における、許可される最大ネスト深度を増やしてください。