自分のマシンにユーザーAとしてログインしていますが、プル元のサーバーのユーザー名Bからリポジトリにアクセスできます。 .gitmodules
ファイルにはurl = ssh://domain.com/abc/def.git
があります。
git submodule update
を実行するときに、Aではなくユーザー名Bを使用するようにgitを構成するにはどうすればよいですか?
サブモジュールはすでに初期化されていると思いますので、git config --list | grep ^submodule
はsubmodule.my-submodule.url=ssh://domain.com/abc/def.git
のようなものを示しています。
git submodule update
を初めて実行していない場合は、その構成オプションを変更するだけです。と:
git config submodule.my-submodule.url ssh://[email protected]/abc/def.git
一方、サブモジュールがすでに一度更新されている場合、サブモジュールのOrigin
は、その構成オプションで指定されたものに設定されます。その場合、次のことを行う必要があります。
cd my-submodule
git config remote.Origin.url ssh://[email protected]/abc/def.git
少し紛らわしいですが、サブモジュールは非常に柔軟性があります。私はこれらの詳細のいくつかを ブログ投稿 で説明しようとしました。
上記の解決策は機能しますが、自分のニーズ、そしておそらく元の要求者のニーズにより適した別の解決策を見つけました。プロジェクトごとにgit構成を変更する代わりに、リモートサーバーでのすべてのgit操作にデフォルトのユーザー名を指定する方法が必要でした。このソリューションは、実際にはgitとはまったく関係ありませんが、sshとは関係ありません。
これらの行を〜/ .ssh/configに追加するだけです。
Host domain.com
User B
(domain.comをgitサーバーのドメインに置き換えます。)これで、ユーザーAとしてローカルマシンにログインしている場合でも、SSHはサーバーに接続するときにユーザー名としてBを使用します。
これで、gitconfigにユーザー名を追加せずにgit submodule update
を実行できます。
簡単な答えは、「サブモジュールに相対パスを使用できるかどうかを確認する」です。
詳細は、複数のアプリで使用されているサブモジュールがあります。サブモジュールを同じリポジトリに保持しました。
構造はこんな感じ、レポ
| -app1 | -app2 | -submod
アプリのクローンを作成すると、app/.git/configは「[email protected]」のような現在のユーザーのURLを取得します。アプリの.gitmodulesでは「../submod」としてURLを指定します。このように、「サブモジュール」を実行するとinit '、gitは、.gitmodulesで指定した相対URLからサブモジュールの絶対URLを生成します。