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.)
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.
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
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'
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
Les étapes suivantes résoudront le problème.
git submodule sync
git submodule update --init
J'espère que cela t'aides.
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