web-dev-qa-db-ja.com

GITを使用してサブモジュールを更新するときの致命的なエラー

この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

(サブモジュールとして複製しようとしない場合、サブモジュールは複製できます。)

36
Devin Dixon

問題は、サーバーからリポジトリをダウンロードするために必要な公開キーを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これを機能させるには、おそらくサブモジュールのリモートをセットアップしているはずです。

73

一部の人々に役立つ場合:

.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
36
Temi

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'

4
RC_02

これは、私にとって.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/

ダニエルの答えに基づいた根本的なソリューション

3
hmedia1

次の手順で問題を解決します。

  1. ローカルのサブモジュールのフォルダーを削除します。
  2. 行う git submodule sync
  3. git submodule update --init

お役に立てれば。

2
Sruthi

これと同じ問題がありました。ただし、私の状況では、チームは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

1
Kio Krofovitch