web-dev-qa-db-ja.com

他のユーザーとのgitサブモジュールの更新

自分のマシンにユーザーAとしてログインしていますが、プル元のサーバーのユーザー名Bからリポジトリにアクセスできます。 .gitmodulesファイルにはurl = ssh://domain.com/abc/def.gitがあります。

git submodule updateを実行するときに、Aではなくユーザー名Bを使用するようにgitを構成するにはどうすればよいですか?

25
Jonas Byström

サブモジュールはすでに初期化されていると思いますので、git config --list | grep ^submodulesubmodule.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

少し紛らわしいですが、サブモジュールは非常に柔軟性があります。私はこれらの詳細のいくつかを ブログ投稿 で説明しようとしました。

34
Mark Longair

上記の解決策は機能しますが、自分のニーズ、そしておそらく元の要求者のニーズにより適した別の解決策を見つけました。プロジェクトごとにgit構成を変更する代わりに、リモートサーバーでのすべてのgit操作にデフォルトのユーザー名を指定する方法が必要でした。このソリューションは、実際にはgitとはまったく関係ありませんが、sshとは関係ありません。

これらの行を〜/ .ssh/configに追加するだけです。

Host domain.com
User B

(domain.comをgitサーバーのドメインに置き換えます。)これで、ユーザーAとしてローカルマシンにログインしている場合でも、SSHはサーバーに接続するときにユーザー名としてBを使用します。

これで、gitconfigにユーザー名を追加せずにgit submodule updateを実行できます。

15
Steve Rank

簡単な答えは、「サブモジュールに相対パスを使用できるかどうかを確認する」です。

詳細は、複数のアプリで使用されているサブモジュールがあります。サブモジュールを同じリポジトリに保持しました。

構造はこんな感じ、レポ

 | -app1 
 | -app2 
 | -submod 

アプリのクローンを作成すると、app/.git/configは「[email protected]」のような現在のユーザーのURLを取得します。アプリの.gitmodulesでは「../submod」としてURLを指定します。このように、「サブモジュール」を実行するとinit '、gitは、.gitmodulesで指定した相対URLからサブモジュールの絶対URLを生成します。

1
siliconsenthil