リポジトリのミラーリング

外部ソースとの間でリポジトリを_ミラーリング_できます。どのリポジトリをソースとするかを選択できます。ブランチ、タグ、コミットは自動的に同期されます。

note
SCP 形式の URL はサポートされていません。しかし、SCP 形式の URL を実装するための作業は、このイシューで追跡されています。イシューを購読して進捗を追ってください。

いくつかのミラーリング方法が存在します:

  • プッシュ:GitLabから別の場所にリポジトリをミラーリングします。
  • Pull: リポジトリを別の場所から GitLab Premium インスタンスにミラーリングします。
  • 双方向のミラーリングも可能ですが、競合を引き起こす可能性があります。

以下の場合にリポジトリをミラーします:

  • プロジェクトの正規バージョンがGitLabにマイグレーションしました。プロジェクトのコピーを以前のホームで提供し続けるには、GitLabリポジトリをプッシュミラーとして設定します。GitLab リポジトリに加えた変更は、古い場所にコピーされます。
  • あなたの GitLab インスタンスは非公開ですが、いくつかのプロジェクトをオープンソースにしたいと考えています。
  • あなたはGitLabにマイグレーションしましたが、プロジェクトの正規バージョンは他の場所にあります。あなたのGitLabリポジトリを他のプロジェクトのプルミラーとして設定します。あなたのGitLabリポジトリはプロジェクトのコミット、タグ、ブランチのコピーをプルします。それらはGitLabで利用できるようになります。

リポジトリミラーを作成

前提条件:

  • 少なくともプロジェクトのメンテナーのロールを持っている必要があります。
  • ミラーがssh:// で接続する場合、ホスト鍵がサーバ上で検出可能でなければなりません。
  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定] > [リポジトリ]を選択します。
  3. リポジトリをミラーリング]を展開します。
  4. Add newを選択します。
  5. Git リポジトリの URL を入力します。セキュリティ上の理由から、元のリポジトリへの URL は、ミラーリングプロジェクトのメンテナー ロールまたはオーナー ロールを持つユーザーにのみ表示されます。
  6. ミラーの方向を選択します。
  7. ssh:// URLを入力した場合は、どちらかを選択します:
    • Detect host keys:GitLab はサーバーからホストキーを取得し、フィンガープリントを表示します。
    • ホストキーを手動で入力しSSHホストキーに入力します。

    リポジトリをミラーリングするとき、GitLabは接続する前に、保存されたホストキーの少なくとも1つが一致することを確認します。この確認により、悪意のあるコードの注入やパスワードの盗難からミラーを守ることができます。

  8. 認証方法を選択します。詳細については、ミラーの認証方法を参照してください。
  9. SSH ホストキーで認証する場合は、ホストキーが正しいことを確認します
  10. 乖離した参照に対する強制プッシュを防ぐには、以下を選択します。 分岐した参照を保持.
  11. オプション。ミラーするブランチの数を制限するには、保護されたブランチのみをミラーするを選択するか、特定のブランチをミラーするで正規表現を入力します。
  12. リポジトリのミラー化を選択します。

認証方法としてSSH public key を選択すると、GitLab は GitLab リポジトリの公開鍵を生成します。この鍵をGitLab以外のサーバーに提供する必要があります。詳しくは、SSH 公開キーを入手するをご覧ください。

保護されたブランチのみをミラーリング

ミラーリングプロジェクトの保護ブランチだけを、リモートリポジトリから、あるいはリモートリポジトリにミラーリングすることができます。プルミラーリングの場合、ミラーリングプロジェクトの保護されていないブランチはミラーリングされず、分岐する可能性があります。

このオプションを使用するには、リポジトリミラーを作成するときに保護されたブランチだけをミラーする を選択してください。

特定のブランチをミラーします

  • GitLab 15.8 で導入された正規表現にマッチするブランチをmirror_only_branches_match_regexというフラグでミラーリングします。デフォルトでは無効です。
  • GitLab 16.0ではデフォルトで有効
  • GitLab 16.2で一般的に利用可能に。機能フラグmirror_only_branches_match_regex を削除しました。re2 正規表現にマッチする名前のブランチだけをミラーするには、Mirror specific branchesフィールドに正規表現を入力してください。正規表現にマッチしない名前のブランチはミラーされません。

ミラーの更新

ミラーリポジトリが更新されると、すべての新しいブランチ、タグ、コミットがプロジェクトのアクティビティフィードに表示されます。GitLab のリポジトリミラーは自動的に更新されます。手動で更新をトリガーすることもできます:

note
GitLabサイレントモードはプッシュとプルの両方のアップデートを無効にします。

アップデートの強制

ミラーは自動的に更新されるようにスケジュールされていますが、更新を強制することもできます:

  • ミラーが既に更新されている場合。
  • プルミラーリング制限の間隔 (秒) は、前回の更新から経過していません。

前提条件

  • 少なくともプロジェクトのメンテナーのロールを持っている必要があります。
  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定] > [リポジトリ]を選択します。
  3. リポジトリをミラーリング]を展開します。
  4. Mirrored repositoriesにスクロールし、更新するミラーを特定します。
  5. Update now({retry})を選択します:Repository mirroring force update user interface

ミラーの認証方法

ミラーを作成する際には、認証方法を設定する必要があります。GitLab は以下の認証方法をサポートしています:

パスワード認証を使用する場合は、必ずユーザー名を指定してください。プロジェクトアクセストークンや グループアクセストークンの場合は、ユーザー名(トークン名ではない)とトークンをパスワードとして使用します。

SSH認証

SSH認証は相互認証です:

  • リポジトリへのアクセスが許可されていることをサーバーに証明する必要があります。
  • また、サーバーは、そのサーバーが誰であるかを証明しなければなりません。

SSH認証では、パスワードや_公開鍵として_自分の認証情報を提供します。もう一方のリポジトリが存在するサーバーは、その認証情報を_ホスト鍵として_提供します。このホスト鍵の指紋を手動で確認する必要があります。

SSH 経由でミラーリングする場合(ssh:// URL を使用する)、次の方法で認証できます:

  • パスワードベースの認証。
  • 公開鍵認証。この方法はパスワード認証よりもセキュリティが高いことが多く、特に相手のリポジトリがデプロイ鍵に対応している場合に有効です。

SSH 公開キーを取得します。

リポジトリをミラーリングし、認証方法としてSSH公開キーを選択すると、GitLabはあなたのために公開キーを生成します。GitLab 以外のサーバーは、GitLab リポジトリとの信頼を確立するためにこの鍵を必要とします。SSH 公開キーをコピーするには、以下の手順に従います:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定] > [リポジトリ]を選択します。
  3. リポジトリをミラーリング]を展開します。
  4. Mirrored repositoriesまでスクロールします。
  5. 正しいリポジトリを確認し、SSH公開キーをコピーする({copy-to-clipboard})を選択します。
  6. 公開 SSH キーをもう一方のリポジトリの設定に追加します:
    • 相手のリポジトリが GitLab でホストされている場合は、公開 SSH キーをデプロイキーとして追加します。
    • 他のリポジトリが他の場所でホストされている場合は、キーをユーザーのauthorized_keys ファイルに追加します。公開 SSH キーをすべてファイルに貼り付けて保存します。

いつでも鍵を変更しなければならない場合は、ミラーを削除して追加し直すことで新しい鍵を生成できます。もう一方のリポジトリを新しい鍵で更新して、ミラーを実行し続けます。

note
生成された鍵はファイルシステムではなく GitLab データベースに保存されます。そのため、ミラー用のSSH公開キー認証は受信前のフックでは使用できません。

ホスト鍵の検証

ホスト鍵を使うときは、常にフィンガープリントが期待するものと一致していることを確認してください。GitLab.com や他のコードホスティングサイトはフィンガープリントを公開しており、確認することができます:

その他のプロバイダーは様々です。以下のコマンドを使えば、安全に鍵指紋を集めることができます:

  • セルフマネジメントGitLabを実行します。
  • もう一方のリポジトリのサーバーにアクセスできること。
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)

古いバージョンの SSH では、コマンドから-E md5 を削除する必要があるかもしれません。