ssh または https 経由で git サブモジュールに自動的にアクセスする 質問する

ssh または https 経由で git サブモジュールに自動的にアクセスする 質問する

質問:
メインリポジトリと同じ方法 (ssh または https) を使用して、git サブモジュールを自動的にチェックアウトする方法はありますか?

背景:

非公開の GitLab リポジトリ ( main) があり、このリポジトリにはサブモジュール ( utils) があり、これも同じサーバー上で非公開の GitLab リポジトリとしてホストされています。これらのリポジトリには、ssh または https 経由でアクセスできます。

どちらのバージョンも明らかに異なる形式の認証が必要であり、クライアント コンピューターとユーザーに応じて、どちらか一方が優先されます。

トップレベルのリポジトリ ( main) の場合、誰でも自分の好みの方法を選択できるため、これは問題になりませんが、サブモジュールの場合、これはファイルに依存するため.gitmodules、(最初は) すべてに対して同じになります。
これで、誰もが .gitmodules ファイルを好みに合わせて調整し、それらの変更を誤ってコミットしないようにする代わりに、サーバーとリポジトリのパスを指定するだけで、git がメインのリポジトリに使用されるのと同じ方法、または gitconfig で設定できる方法を選択できると便利です。

ベストアンサー1

私は最終的にサブモジュールのURLを次のように指定することでこの問題を解決しました。相対パス:

メインのgitリポジトリにアクセスできるとします

  • またはhttps://gitlabserver.com/my/path/main.git
  • または[email protected]:my/path/main.git

ファイルは.gitmodules次のようになります:

[submodule "utils"]     
    path = libs/utils   
    url = https://gitlabserver.com/my/path/utils.git

つまり、メイン アプリケーションを ssh 経由でチェックアウトした場合でも、サブモジュール ユーティリティには https 経由でアクセスされることになります。

ただし、次のように絶対パスを相対パスに置き換えることができます。

[submodule "utils"]     
    path = libs/utils   
    url = ../utils.git

そしてこれからは

  • どちらかgit clone --recursive https://gitlabserver.com/my/path/main.git
  • またはgit clone --recursive [email protected]:my/path/main.git

リポジトリ構造全体を任意の方法で取得します。明らかに、相対 ssh パスと https パスが同じでない場合は機能しませんが、少なくとも GitLab がホストするリポジトリの場合はこれに該当します。

これは、(何らかの理由で)リポジトリ構造を 2 つの異なるリモート サイトにミラーリングする場合にも便利です。

おすすめ記事