web-dev-qa-db-ja.com

GitサブモジュールのURLにユーザー名が含まれていませんか?

いくつかのサブモジュールを使用してgitリポジトリをセットアップします。これにより、親リポジトリの追跡ファイルである.gitmodulesファイルが作成されます。ただし、他の開発者がこのリポジトリで作業し、サブモジュールをチェックアウトしたいと考えています。しかし現在、リモートサブモジュールリポジトリのURLにはユーザー名が含まれています。 .gitmodulesファイルでは次のようになります。

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

明らかに、他の開発者はexample.comからmyuserとして取得できません(彼らは自分のパスワードを持っていません)。複数の開発者がプル/プッシュできる1つのメインリポジトリを作成し、サブモジュールに個別にアクセスできるようにする方法(サブモジュールホストサーバーですべて共有する単一のユーザー名を設定すると機能しますが、適切なユーザー管理ではありません) ?

46

正しく理解できれば、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に保存されることに注意してください。

33
Mark Longair

実際には、.gitconfigでサブモジュールへの「相対」パスを指定できます。

[submodule foo]  
path = sub/foo  
url = ./git/foo.git

このURLは、リポジトリ自体と同じホスト( https://example.com )を参照します。

30
AntonK

このスレッドは助けてくれましたが、ファイルの内容を変更した後に追加します。gitmodules gitがそれを取得できるように、次のコマンドを実行する必要があります。

git submodule sync
10
user698116

個人の.gitconfigまたは.git/configはバージョン管理下にないため、Antonkの回答はチームでは機能しません。

しかし、それは.gitmodulesのURLを試すことにつながりました。

[submodule foo]
path = sub/foo
url = ../foo.git

サブモジュールのリポジトリが親と同じURLにあると仮定して、私のために働いた。

9
rhamilton

Ssh認証を使用できます。

これを交換してください

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

これとともに

[submodule foo]
  path = sub/foo
  url = [email protected]:git/foo.git
5
mkilic

Gerrit(ssh経由)と組み合わせてこの問題が発生しました。
ユーザー名の削除は機能しましたが、
そのため、私の。gitmodulesは次のようになります。

[submodule "sub/module1"]
    path = sub/module1
    url = ssh://servername:29418/module1
2
Roman

あなたが試すことができます .insteadOf、例:.

git config --global url."ssh://[email protected]:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"

各開発者は、作業する各コンピューターでこれを1回行う必要があります。

1
bviktor

.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
0