web-dev-qa-db-fra.com

Erreur fatale lors de la mise à jour du sous-module à l'aide de GIT

J'essaie de mettre à jour les sous-modules de ce référentiel git mais je reçois toujours des erreurs fatales:

[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

Ou de cette façon

[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

Une idée de pourquoi cela se produit avec le sous-module? Le repo est celui-ci:

https://github.com/ProdigyView/ProdigyView

(Le sous-module peut être cloné si je n'essaie pas de le cloner en tant que sous-module.)

36
Devin Dixon

Le problème est que git ne peut pas trouver la clé publique nécessaire pour télécharger le dépôt à partir de votre serveur, la solution est d'utiliser l'url publique.

Dans le fichier .gitmodule, vous trouverez l'entrée suivante:

[submodule "example"]
    path = example
    url = [email protected]:webhat/example.git

L'URL doit être remplacée par l'URL publique du module:

[submodule "example"]
    path = example
    url = https://github.com/webhat/example.git

Comme vous pouvez le voir, le préfixe git @ a été changé en https: // et l'infixe : devient /

EDIT: Dans votre propre référentiel, vous devrez peut-être utiliser git:// plutôt que https://

La réponse précédente n'était pas claire pour moi, alors j'ai ajouté ceci.

EDIT 2: Si vous trouvez que vous devez exécuter git submodule sync ou besoin de modifier .git/config pour que cela fonctionne, vous avez probablement configuré des télécommandes pour les sous-modules.

73
Daniël W. Crompton

Si cela peut aider certaines personnes:

Je mets à jour mes .gitmodules

[submodule "example"]
  path = example
  url = https://github.com/webhat/example.git

Ensuite, je mets également à jour mon .git/config

[submodule "example"]
  url = https://github.com/webhat/example.git

Comme certains d'entre vous l'ont déjà dit (et je vous remercie).

Ensuite, je mets à jour mon .git/modules/example/config

[remote "Origin"]
  fetch = [...]
  url = https://github.com/webhat/example.git

Et pour finir je fais

git submodule sync
git submodule init
git submodule update
36
Temi

Vous pouvez passer manuellement la clé dans la section Build -> "Execute Shell" du travail jenkins:

ssh-agent bash -c 'ssh-add {path_to_private_key}; git submodule update --init --recursive'

Exemple:

ssh-agent bash -c 'ssh-add /var/lib/jenkins/.ssh/jenkins_rsa; git submodule update --init --recursive'

4
RC_02

Cela m'est arrivé plusieurs fois pour moi de mettre une fonction dans mon .bash_profile (fonctionne sur 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
}

Une doublure:

sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules ; git submodule sync ; git submodule update --init --recursive

recherche/remplacement vim:

%s/\(url\s*=\s*\)\(.*:\)\(.*\)/\1https:\/\/github.com\/\3/

Solution sous-jacente basée sur la réponse de Daniël

3
hmedia1

Les étapes suivantes résoudront le problème.

  1. Supprimez le dossier du sous-module sur votre section locale.
  2. Faire git submodule sync
  3. puis git submodule update --init

J'espère que cela t'aides.

2
Sruthi

J'ai eu ce même problème. Cependant, dans ma situation, l'équipe voulait utiliser l'accès SSH à partir des modules .git, donc modifier l'URL pour utiliser http: // n'était pas un option.

En fin de compte, mon problème était d'avoir un fichier ~/.ssh/config incorrect. Le fichier de configuration avait des paramètres erronés, donc j'essayais en fait d'accéder au serveur incorrect chaque fois que je voulais vraiment accéder à [email protected]. J'ai découvert cela en exécutant la commande suivante:

ssh -vT [email protected]

La troisième ligne devrait dire ceci:

debug1: Connection to github.com [<ip address>] port <port num>

Si vous n'essayez pas de vous connecter à github.com, votre fichier de configuration vous indique bien sûr.

Il s'avère que je n'avais de toute façon pas besoin des éléments de mon fichier de configuration, donc je pouvais le supprimer en toute sécurité. Si vous souhaitez conserver un fichier de configuration, voici un bon article à ce sujet:

http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/

De plus, ces documents GitHub m'ont vraiment aidé à déboguer mon problème:

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