Gitlabのプライベートリポジトリでgit clone [email protected]:group/project-submodule.git
を実行すると、クローンが正常に完了します。
クローンプロセスの一部として、秘密キーのパスフレーズとして質問されます。
submodule update --init "group/project-submodule"
を実行すると
それは失敗します:
権限が拒否されました。もう一度お試しください。権限が拒否されました。もう一度お試しください。権限が拒否されました(publickey、gssapi-keyex、gssapi-with-mic、password)。致命的:リモートリポジトリから読み取れませんでした。
サブモジュールの取得を処理しようとしているときに、秘密キーのパスフレーズとして質問されませんを取得します。
(私はそれを匿名化しなければなりませんでした)
致命的: '[email protected]:group/project-submodule.git'のサブモジュールパス 'C:/ Users/user/repos/project-module/project-submodule'へのクローンに失敗しました
.gitmodules
ファイルを確認したところ、正しいデータが含まれています(エラーメッセージで確認できると思います)。
私の注意を喚起する主な要素は、秘密鍵のパスフレーズを求められないことです。奇妙なことに、git clone
を直接使用すると、期待どおりに実行されるためです。
私はすでにssh
を使用してアクセスすることで診断し、プルまたはクローンを実行するときに発生するのと同じように、パスフレーズを要求します
Git for windows "git version 2.16.2.windows.1"を使用する
Gitはhttpsではなくsshを使用してサブモジュールのクローンを作成しようとします。 sshキーを設定していない場合、これは失敗します。
ssh-agentをセットアップして、sshキーのパスワードをキャッシュし、gitにそれを使用させることができます。またはhttpsに変更します。
Gitはサブモジュールに関して少し混乱しています。それらはディレクトリの.gitmodules
ファイルで設定されますが、ここでURLをsshからhttpsに変更しても役に立ちません。 Gitは.git/config
で構成されたURLを使用します。
このファイルを開くと、このようなものが見つかります。
[submodule "project-submodule"]
url = [email protected]:project-submodule.git
このURLをhttpsの同等のURLに変更して、再試行してください。
Sshキーを、パスフレーズを必要としないものに変更することもできます。同じ問題が発生しましたが、今はgit submodule update --init --recursive
は、パスフレーズを使用しないと問題なく動作します。
Windows gitのバグのようですが、サブモジュールを更新するときに、言い換えキーを要求しません。 (gitバージョン2.19.1.windows.1)
Lukas-reinekeからの回答では、ssh-agent
を使用してhttpsの代わりにssh経由で複製するように構成されているgitサブモジュールの複製を可能にする問題と可能な解決策を正しく説明しています。
ssh-agent
を使用する代わりに、PuTTYのpageant
を使用できます。そうすることで、gitリポジトリがあるホストをPuTTYの保存済みセッションとして構成し、サブモジュールのクローンを作成できます。
set GIT_SSH=plink & git submodule update
もちろん、plink.exe
が実際に%PATH%
にあること、および実行中のpageant
インスタンスに秘密鍵を追加していることを確認する必要があります(少しのシステムトレイがあるはずです) 「キーの追加」をクリックできるアイコン)。
ssh-agent
は、ウィンドウのネイティブcmd.exeから正しく実行するのが少し難しい場合があるため、この代替方法が非常に役立つことがわかりました。