web-dev-qa-db-ja.com

git cloneが機能します。 gitサブモジュールが「Permission denied」に失敗する

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"を使用する

11
brunoais

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に変更して、再試行してください。

14
lukas-reineke

Sshキーを、パスフレーズを必要としないものに変更することもできます。同じ問題が発生しましたが、今はgit submodule update --init --recursiveは、パスフレーズを使用しないと問題なく動作します。

Windows gitのバグのようですが、サブモジュールを更新するときに、言い換えキーを要求しません。 (gitバージョン2.19.1.windows.1)

1
Vince Patron

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から正しく実行するのが少し難しい場合があるため、この代替方法が非常に役立つことがわかりました。

1
Andreas Raster