Fatal Error when updating submodule using GIT

GitGithubSshGit Submodules

Git Problem Overview


I am trying to update the submodules of this git repositary but I keep getting a fatal errors:

[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

Or this way

[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' (git@github.com:ProdigyView/ProdigyView-Core.git) registered for path 'core'
Cloning into core...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:ProdigyView/ProdigyView-Core.git' into submodule path 'core' failed

Any ideas of why this is happening withthe submodule? The repo is this one:

https://github.com/ProdigyView/ProdigyView

(The submodule is able to be cloned if I do not try to clone it as a submodule.)

Git Solutions


Solution 1 - Git

The issue is that git can't find the public key needed to download the repo from your server, the solution is to use the public url.

In the file .gitmodule you will find the following entry:

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

The URL need to be changed to the public URL for the module:

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

As you can see the prefix git@ has been changed to https:// and the infix : becomes /

EDIT: In your own repository you might need to use git:// rather than https://

The previous answer was unclear to me, so I added this.

EDIT 2: If you find you need to run git submodule sync or need to edit .git/config to get this to work, you have likely set up remotes for the submodules.

Solution 2 - Git

If it can help some people:

I update my .gitmodules

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

Then I update my .git/config too

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

Like some of you said it before (and I thank you).

Then I update my .git/modules/example/config

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

And to finish I do

git submodule sync
git submodule init
git submodule update

Solution 3 - Git

You can manually pass in the key in Build --> "Execute shell" section of jenkins job :

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

Example:

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

Solution 4 - Git

The following steps will fix the problem.

  1. Delete the folder of the submodule on your local.
  2. Do git submodule sync
  3. then git submodule update --init

Hope this helps.

Solution 5 - Git

This is happened that many times for me that I put a function in my .bash_profile (works on 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
}

A one liner:

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

vim search/replace:

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

Underlying solution based on Daniël 's answer

Solution 6 - Git

Adding new answer instead of edit for greater visibility to anyone experience the same problem I was...

I had the exact opposite. Private Bitbucket repo & submodule for work. Always got this error...

fatal: repository 'http://bitbucket.org/companyname/submodule-repo-name.git' does not exist
fatal: clone of 'http://bitbucket.org/companyname/submodule-repo-name.git' into submodule path 
'/Users/me/path/to/repo-using-submodule/folder' failed
Failed to clone 'submodule/folder'. Retry scheduled
fatal: repository 'http://bitbucket.org/companyname/submodule-repo-name.git' does not exist
fatal: clone of 'http://bitbucket.org/companyname/submodule-repo-name.git' into submodule path 
'/Users/me/path/to/repo-using-submodule/folder' failed
Failed to clone 'submodule/folder' a second time, aborting

I had to manually go into my .git/config file and update this:

[submodule "submodule-name"]
url = https://bitbucket.org/companyname/submodule-repo.git

with this:

[submodule "submodule-name"]
url = git@bitbucket.org:companyname/submodule-repo.git

Not sure how to set this up so me and all my coworkers can use the submodule without tweaking, but got me past my several month long struggle with this.

Solution 7 - Git

I had this same issue. However, in my situation, the team wanted to use the SSH access from the .gitmodules, so modifying the URL to use http:// was not an option.

Ultimately, my issue was having an incorrect ~/.ssh/config file. The config file had some erroneous settings, so I was actually trying to access the incorrect server every time I'd really want to access [email protected]. I found this out by executing the following command:

ssh -vT git@github.com

The third line or so should say this:

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

If you aren't attempting to connect to github.com, then your config file is pointing you off course.

Turns out I didn't need any of the stuff in my config file anyway, so I was safe to delete it. If you want to maintain a config file, here is a good article on that:

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

Also, these GitHub docs really helped me debug my issue:

https://help.github.com/articles/error-permission-denied-publickey

https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist

Solution 8 - Git

Figured it out. The path in the .gitmodule files could not download the submodule.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDevin DixonView Question on Stackoverflow
Solution 1 - GitDaniël W. CromptonView Answer on Stackoverflow
Solution 2 - GitTemiView Answer on Stackoverflow
Solution 3 - GitRC_02View Answer on Stackoverflow
Solution 4 - GitSruthiView Answer on Stackoverflow
Solution 5 - Githmedia1View Answer on Stackoverflow
Solution 6 - GitMayTheSForceBeWithYouView Answer on Stackoverflow
Solution 7 - GitKio KrofovitchView Answer on Stackoverflow
Solution 8 - GitDevin DixonView Answer on Stackoverflow