いくつかのサブモジュールを含むgitリポジトリに問題があります。
スーパーgitリポジトリは、次のコマンドで構築されました
mkdir projectname
cd projectname
git init
git submodule add ssh://myusername@server/pathtorepos
別のユーザー( "otheruser")がスーパーリポジトリのクローンを作成すると、すべてうまくいくようです。しかし、サブモジュールにアクセスするときが来たとき
git submodule init
git submodule update
gitは、「otheruser」の代わりに「myusername」を使用してサブモジュールのクローンを作成しようとします。
この問題を解決するには?
可能であれば、.gitmodules
ファイルに、誰でも複製できるリポジトリのURL、通常はgit://
またはhttp://
URLが含まれていることを確認するのが最善です。次に、SSHアクセス権を持っているユーザーは、複製後にサブモジュールに変更し、remote.Origin.url
のURLを変更して、ユーザー名でSSH URLを指すようにします。例:
cd my-submodule
git remote set-url Origin otheruser@server:/pathtorepos
他のユーザーは、現在の状況でもそれを行うことができるはずです。 更新:クリス・ジョンセンは、ユーザー名を省略し、リポジトリのすべてのユーザーがSSHアクセスを持っている場合、.gitmodules
でSSH URLを使用することも合理的であることを以下に指摘します。ローカルとリモートで異なる場合、上記と同様にユーザー名を追加します。
.gitmodules
のURLは、サブモジュールをinitializingする場合にのみ使用されることに注意してください。サブモジュールを初期化すると、メインプロジェクトの構成値submodule.<SUBMODULE-NAME>.url
が.gitmodules
でコミットされたものに設定されます。これは、最初のサブモジュールの更新で使用される値です。サブモジュールの初期化と更新の間で、次のようなコマンドで最初の更新に使用されるこのURLを変更することもできます。
git config submodule.my-submodule.url otheruser@server:/pathtorepos
実際、最初の更新が失敗した場合、これを行う必要があります。サブモジュールが初めて更新されると、変更する必要があるURLは、サブモジュール内のOrigin
に定義されているURLです。その時点では、メインのsubmodule.my-submodule.url
構成値を設定するだけですサブモジュールを削除して再更新する可能性が高い場合は、project。
他のユーザーは、.git/config
ファイルを変更して、ユーザー名を自分のユーザー名に変更する必要があります。このようにして、gitは適切なユーザーを使用してサーバーに接続します。
[submodule "path/to/module"]
url = ssh://otheruser@server/pathtorepos
オープンソースプロジェクトでこれに対処するには、.gitmodulesファイルに相対URLを入力します。これにより、gitは親プロジェクトのURLパターンによって複製されるURLに基づいてサブモジュールURLを複製します。相対パスを使用すると、プロトコル(https、ssh)とユーザー名を完全に指定する必要がなくなります。
[submodule "my/tests/schemas"]
path = my/tests/schemas
url = ../my-schema
追伸投稿した後、私は私の答えがだまされていることに気付きました、ここにあなたが使用すべきソースがあります: sshまたはhttps経由でサブモジュールに自動的にアクセスする
参考までに、私が使用したソリューションは次のとおりです。実際、他の人が既存のリポジトリをチェックアウトすることは可能です。
リポジトリをチェックアウトする必要があるときは、コマンドで実行できます
git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git submodule init
git submodule update
他の人がスーパーリポジトリをチェックアウトするには、次のコマンドセットが使用されます。唯一の違いは、他のリポジトリの手動クローニングです
git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git clone ssh://[email protected]/path/to/other/repos
git submodule init
git submodule update
を発行した後に注意してください
git submodule init
コマンドを実行すると、gitは要求されたリポジトリと利用可能なリポジトリが同一ではないことを通知します。しかし、これは致命的ではなく、安全に続行できます。
ユーザー名をURLに含めないでください。 gitはclone/pull/etcのときにユーザー名とパスワードの入力を求めます