いくつかのサブモジュールを使用してgitリポジトリをセットアップします。これにより、親リポジトリの追跡ファイルである.gitmodules
ファイルが作成されます。ただし、他の開発者がこのリポジトリで作業し、サブモジュールをチェックアウトしたいと考えています。しかし現在、リモートサブモジュールリポジトリのURLにはユーザー名が含まれています。 .gitmodules
ファイルでは次のようになります。
[submodule foo]
path = sub/foo
url = https://[email protected]/git/foo.git
明らかに、他の開発者はexample.com
からmyuser
として取得できません(彼らは自分のパスワードを持っていません)。複数の開発者がプル/プッシュできる1つのメインリポジトリを作成し、サブモジュールに個別にアクセスできるようにする方法(サブモジュールホストサーバーですべて共有する単一のユーザー名を設定すると機能しますが、適切なユーザー管理ではありません) ?
正しく理解できれば、HTTPS経由のHTTP基本認証を使用して、特定の開発者のみがリポジトリにアクセスできるようにしています。その場合、次のような.gitmodules
をコミットできます。
[submodule foo]
path = sub/foo
url = https://example.com/git/foo.git
...つまり、ユーザー名なしで、各開発者に~/.netrc
ファイルにユーザー名とパスワードを入力するように指示します。 (Windowsを使用している場合は、 ここに関するいくつかの良いアドバイス があります。)単純な.netrc
ファイルは次のようになります。
machine example.com
login myusername
password areamandyingtotellsomeonehiscoolpassword
更新:.netrc
の使用を伴わない代替手段は、次のとおりです:
再度、.gitmodules
のURLからユーザー名を削除し、その変更をコミットしてプッシュします。誰かがリポジトリのクローンを作成すると、最初に実行されます。
git submodule init
...構成オプションsubmodule.sub/foo.url
を.gitmodules
のURLに設定します。ただし、init
ステップは、git submodule update
を実行するまでサブモジュールを所定の場所に複製しないため、次のことができます。
git config submodule.sub/foo.url https://myuser:[email protected]/git/foo.git
... その後:
git submodule update
適切なユーザー名でサブモジュールを複製します。 HTTP認証のユーザー名とパスワードがgit configに保存されることに注意してください。
実際には、.gitconfig
でサブモジュールへの「相対」パスを指定できます。
[submodule foo]
path = sub/foo
url = ./git/foo.git
このURLは、リポジトリ自体と同じホスト( https://example.com )を参照します。
このスレッドは助けてくれましたが、ファイルの内容を変更した後に追加します。gitmodules gitがそれを取得できるように、次のコマンドを実行する必要があります。
git submodule sync
個人の.gitconfigまたは.git/configはバージョン管理下にないため、Antonkの回答はチームでは機能しません。
しかし、それは.gitmodulesのURLを試すことにつながりました。
[submodule foo]
path = sub/foo
url = ../foo.git
サブモジュールのリポジトリが親と同じURLにあると仮定して、私のために働いた。
Ssh認証を使用できます。
これを交換してください
[submodule foo]
path = sub/foo
url = https://[email protected]/git/foo.git
これとともに
[submodule foo]
path = sub/foo
url = [email protected]:git/foo.git
Gerrit(ssh経由)と組み合わせてこの問題が発生しました。
ユーザー名の削除は機能しましたが、
そのため、私の。gitmodulesは次のようになります。
[submodule "sub/module1"]
path = sub/module1
url = ssh://servername:29418/module1
あなたが試すことができます .insteadOf
、例:.
git config --global url."ssh://[email protected]:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"
各開発者は、作業する各コンピューターでこれを1回行う必要があります。
.gitmodules
およびurl
からユーザー名を削除します。
[submodule foo]
path = sub/foo
url = https://example.com/git/foo.git
そして最後に:
cd foo/
git submodule init
git submodule update
# Will be prompted to provide username and password