Fatal Error when updating submodule using GIT

75,266

Solution 1

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

Solution 2

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 3

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 4

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 5

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

Share:
75,266
Devin Dixon
Author by

Devin Dixon

Updated on July 09, 2022

Comments

  • Devin Dixon
    Devin Dixon almost 2 years

    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' ([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
    

    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.)

  • Dave Lancea
    Dave Lancea over 12 years
    I'm having this same issue. Could you elaborate on what was wrong and how you fixed it?
  • Khue Vu
    Khue Vu almost 12 years
    This is how I have solved this problem: In the .gitmodules file and .git/config file, you will see url path for the submodule you want to update. If it is like git@github... change it to a valid url: git//github.com/.... it will solve the problem.
  • awolf
    awolf over 11 years
    This answer is terribly unclear. Khune Vu's suggestion did not resolve the issue either.
  • Devin Dixon
    Devin Dixon over 11 years
    Sorry, in your clone directory open up open the file .gitsubmodule. In there you will see that the submodules have paths that are related to the repo in which they are cloned from. Make sure the url that it is cloning from is correct. BTW, the .gitsubmodule is invisible, do an ls -l a from the root to to see it.
  • bfncs
    bfncs over 10 years
    I ran into the same problem today and Github seems to offer public cloning only via HTTPS nowadasy. The URL in your example would have been https://github.com/webhat/example.git then
  • Arnaldo Capo
    Arnaldo Capo over 10 years
    After modifying the path in both places, I kept getting the same errors. I had to delete the folder of the submodule. Do git submodule sync and then git submodule update --init
  • awshepard
    awshepard over 10 years
    Arnaldo, thanks for this, this solved the problem I ran into as well.
  • Alexander
    Alexander over 9 years
    Repeat the procedure in .git/config
  • Daniël W. Crompton
    Daniël W. Crompton over 9 years
    @Alexander I didn't have an issue with .git/config after updating.
  • Nazareno Lorenzo
    Nazareno Lorenzo over 9 years
    This worked for me, but had to run: git submodule sync before running the git submodule update --init --recursive
  • Stealth Rabbi
    Stealth Rabbi over 8 years
    @DevinDixon edit your answer to actually explain what you changed.
  • Vladimir Ivanov
    Vladimir Ivanov about 7 years
    This is actually useful. Even on Windows machine trying to just git submodule update gives you access denied, because no key is actually used.
  • hmedia1
    hmedia1 almost 7 years
    This is such a terrible answer. Not only is the file called .gitmodules not .gitmodule, but all you've done is paraphrased your original question, and given no explanation to help anyone else. Thankfully there is a great answer which Daniël W. Crompton posted, and I encourage you to change the accepted answer to that one @DevinDixon . Meanwhile, I will propose an edit to yours
  • Trake Vital
    Trake Vital almost 3 years
    Don't forget to: git submodule sync git submodule init git submodule update
  • Onat Korucu
    Onat Korucu over 2 years
    The last 3 lines (sync, init, update) helped me when I cloned a project with submodules via Sourcetree. Sourcetree successfully had configured .gitmodules but I was not able to checkout to submodule branches until I synched, initialized and updated. Then I closed and opened Sourcetree and everything was working fine.