このgitリポジトリのサブモジュールを更新しようとしていますが、致命的なエラーが発生し続けます。
[root@iptlock ProdigyView]# git submodule update --recursive
Cloning into core...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed
またはこの方法
[root@iptlock root]# git clone --recursive https://github.com/ProdigyView/ProdigyView.git
Cloning into ProdigyView...
remote: Counting objects: 438, done.
remote: Compressing objects: 100% (275/275), done.
remote: Total 438 (delta 172), reused 394 (delta 128)
Receiving objects: 100% (438/438), 8.03 MiB | 5.19 MiB/s, done.
Resolving deltas: 100% (172/172), done.
Submodule 'core' ([email protected]:ProdigyView/ProdigyView-Core.git) registered for path 'core'
Cloning into core...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Clone of '[email protected]:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed
サブモジュールでこれが起こっている理由のアイデアはありますか?リポジトリは次のとおりです。
https://github.com/ProdigyView/ProdigyView
(サブモジュールとして複製しようとしない場合、サブモジュールは複製できます。)
問題は、サーバーからリポジトリをダウンロードするために必要な公開キーをgitが見つけられないことです。解決策は、公開URLを使用することです。
ファイル.gitmoduleには、次のエントリがあります。
[submodule "example"]
path = example
url = [email protected]:webhat/example.git
モジュールのパブリックURLにURLを変更する必要があります。
[submodule "example"]
path = example
url = https://github.com/webhat/example.git
ご覧のように、プレフィックスgit @はhttps://に変更され、中置記号: =は/になります
編集:独自のリポジトリでは、git://
のではなく https://
前の答えは私には不明瞭だったので、これを追加しました。
編集2:git submodule sync
または編集する必要がある.git/config
これを機能させるには、おそらくサブモジュールのリモートをセットアップしているはずです。
一部の人々に役立つ場合:
.gitmodulesを更新します
[submodule "example"]
path = example
url = https://github.com/webhat/example.git
次に、.git/configも更新します
[submodule "example"]
url = https://github.com/webhat/example.git
前に言ったことのように(そしてありがとう)。
次に、.git/modules/example/configを更新します
[remote "Origin"]
fetch = [...]
url = https://github.com/webhat/example.git
そして終了する
git submodule sync
git submodule init
git submodule update
Jenkinsジョブの[ビルド]-> [シェルの実行]セクションでキーを手動で渡すことができます。
ssh-agent bash -c 'ssh-add {path_to_private_key}; git submodule update --init --recursive'
例:
ssh-agent bash -c 'ssh-add /var/lib/jenkins/.ssh/jenkins_rsa; git submodule update --init --recursive'
これは、私にとって.bash_profileに関数を置くことで何度も起こります(BSD sed/GNU/Mac)で動作します):
gitfix () {
if [ -f "./.gitmodules" ] ; then
sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules \
git submodule sync
git submodule update --init --recursive
fi
}
ワンライナー:
sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules ; git submodule sync ; git submodule update --init --recursive
vim検索/置換:
%s/\(url\s*=\s*\)\(.*:\)\(.*\)/\1https:\/\/github.com\/\3/
ダニエルの答えに基づいた根本的なソリューション
次の手順で問題を解決します。
git submodule sync
git submodule update --init
お役に立てれば。
これと同じ問題がありました。ただし、私の状況では、チームはwanted.gitmodulesからSSHアクセスを使用するため、http://を使用するようにURLを変更することはオプション。
最終的に、私の問題は〜/ .ssh/configファイルが正しくないことでした。構成ファイルには誤った設定が含まれていたため、実際に[email protected]にアクセスするたびに、誤ったサーバーにアクセスしようとしていました。次のコマンドを実行して、これを見つけました。
ssh -vT [email protected]
三行目はこれを言う必要があります:
debug1: Connection to github.com [<ip address>] port <port num>
Github.comへの接続を試みていない場合は、設定ファイルがコース外を示しています。
とにかく、私の設定ファイルには何も必要なかったので、削除しても安全でした。設定ファイルを管理したい場合は、次の記事を参照してください。
http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/
また、これらのGitHubのドキュメントは、問題のデバッグに非常に役立ちました。
https://help.github.com/articles/error-permission-denied-publickey
https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist