- 大規模プロジェクトのインポート
- 大規模プロジェクトのエクスポート
-
トラブルシューティング
Exception: undefined method 'name' for nil:NilClass
Exception: undefined method 'full_path' for nil:NilClass
Exception: No such file or directory @ rb_sysopen - (filename)
Exception: Permission denied @ rb_sysopen - (filename)
Name can contain only letters, digits, emoji ...
Name has already been taken and Path has already been taken
Exception: Error importing repository into (namespace) - No space left on device
- インポートは成功しましたが、
Total number of not imported relations: XX
メッセージが表示され、インポート中にイシューが作成されません。 - インポート時にGitalyがエラーを呼び出します。
Rakeタスクのプロジェクトインポートとエクスポート
GitLabはプロジェクトのインポートとエクスポートのためのRakeタスクを提供します。
互換性のあるGitLabインスタンスからのみインポートできます。
大規模プロジェクトのインポート
このスクリプトはGitLab 12.6で大規模なGitLabプロジェクトのエクスポートをインポートするために導入されました。
このスクリプトの一部として、直接アップロードも無効にしています。こうすることで、巨大なアーカイブをGCSにアップロードすることを避けることができます。
このスクリプトはターミナルから実行できます:
パラメータを指定します:
属性 | 種類 | 必須 | 説明 |
---|---|---|---|
username | 文字列です。 | yes | ユーザー名 |
namespace_path | 文字列です。 | yes | 名前空間パス |
project_path | 文字列です。 | yes | プロジェクトパス |
archive_path | 文字列です。 | yes | インポートしたいエクスポートプロジェクトtarボールのパス |
bundle exec rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file.tar.gz]"
Linuxパッケージインストールを実行している場合、以下のRakeタスクを実行してください:
gitlab-rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file.tar.gz]"
大規模プロジェクトのエクスポート
GitLab 12.9で導入されました。
Rakeタスクを使って大きなプロジェクトをエクスポートできます。
パラメータを指定します:
属性 | 種類 | 必須 | 説明 |
---|---|---|---|
username | 文字列です。 | yes | ユーザー名 |
namespace_path | 文字列です。 | yes | 名前空間パス |
project_path | 文字列です。 | yes | プロジェクト名 |
archive_path | 文字列です。 | yes | エクスポートプロジェクトのtarballを保存するファイルへのパス |
gitlab-rake "gitlab:import_export:export[username, namespace_path, project_path, archive_path]"
トラブルシューティング
インポート/エクスポートに問題がある場合、同じRakeタスクを使ってデバッグモードを有効にすることができます:
# Import
IMPORT_DEBUG=true gitlab-rake "gitlab:import_export:import[root, group/subgroup, testingprojectimport, /path/to/file_to_import.tar.gz]"
# Export
EXPORT_DEBUG=true gitlab-rake "gitlab:import_export:export[root, group/subgroup, projectnametoexport, /tmp/export_file.tar.gz]"
以下に挙げる一般的なエラーとその意味、修正方法を確認してください。
Exception: undefined method 'name' for nil:NilClass
username
は無効です。
Exception: undefined method 'full_path' for nil:NilClass
namespace_path
が存在しません。たとえば、グループまたはサブグループのいずれかが間違って入力されているか、見つからないか、パスにプロジェクト名を指定しています。
タスクはプロジェクトを作成するだけです。新しいグループやサブグループにインポートしたい場合は、まずそれを作成してください。
Exception: No such file or directory @ rb_sysopen - (filename)
archive_path
に指定されたプロジェクト・エクスポート・ファイルがありません。
Exception: Permission denied @ rb_sysopen - (filename)
指定されたプロジェクト・エクスポート・ファイルにgit
ユーザーがアクセスできません。
イシューを修正するには、以下の手順に従ってください:
- ファイルのオーナーを
git:git
に設定します。 - ファイルの権限を
0400
に変更します。 - ファイルを公開フォルダに移動します(例:
/tmp/
)。
Name can contain only letters, digits, emoji ...
Name can contain only letters, digits, emoji, '_', '.', '+', dashes, or spaces. It must start with a letter,
digit, emoji, or '_', and Path can contain only letters, digits, '_', '-', or '.'. It cannot start
with '-', end in '.git', or end in '.atom'.
project_path
で指定されたプロジェクト名は、指定されたいずれかの理由で無効です。
プロジェクト名はproject_path
にのみ記述してください。例えば、サブグループのパスを指定した場合、/
はプロジェクト名に有効な文字ではないため、このエラーで失敗します。
Name has already been taken and Path has already been taken
その名前のプロジェクトはすでに存在します。
Exception: Error importing repository into (namespace) - No space left on device
インポートを完了するには、ディスクの空き容量が不足しています。
インポート中、tarball は設定したshared_path
ディレクトリにキャッシュされます。ディスクに、キャッシュされた tar ボールと解凍されたプロジェクトファイルの両方を格納できる十分な空き容量があることを確認してください。
インポートは成功しましたが、Total number of not imported relations: XX
メッセージが表示され、インポート中にイシューが作成されません。
Total number of not imported relations: XX
、インポート中にイシューが作成されない場合は、exceptions_json.logを確認してください。N is out of range for ActiveModel::Type::Integer with limit 4 bytes
のようなエラーが表示されるかもしれません。N
は4バイトの整数制限を超える整数です。この場合、イシューのrelative_position
フィールドのリバランシングで問題が発生している可能性があります。
# Check the current maximum value of relative_position
Issue.where(project_id: Project.find(ID).root_namespace.all_projects).maximum(:relative_position)
# Run the rebalancing process and check if the maximum value of relative_position has changed
Issues::RelativePositionRebalancingService.new(Project.find(ID).root_namespace.all_projects).execute
Issue.where(project_id: Project.find(ID).root_namespace.all_projects).maximum(:relative_position)
インポートを繰り返し、イシューが正常にインポートされているか確認してください。
インポート時にGitalyがエラーを呼び出します。
大きなプロジェクトを開発環境にインポートしようとすると、Gitalyは呼び出しや呼び出しが多すぎるというエラーを投げるかもしれません。例えば
Error importing repository into qa-perf-testing/gitlabhq - GitalyClient#call called 31 times from single request. Potential n+1?
このエラーは、開発者セットアップの呼び出し回数がn+1回に制限されているためです。このエラーを解決するには、GITALY_DISABLE_REQUEST_LIMITS=1
を環境変数として設定してください。その後、開発環境を再起動し、再度インポートしてください。