Fatal Error when updating submodule using GIT
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
Devin Dixon
Updated on July 09, 2022Comments
-
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 over 12 yearsI'm having this same issue. Could you elaborate on what was wrong and how you fixed it?
-
Khue Vu almost 12 yearsThis 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 over 11 yearsThis answer is terribly unclear. Khune Vu's suggestion did not resolve the issue either.
-
Devin Dixon over 11 yearsSorry, 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 over 10 yearsI 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 over 10 yearsAfter 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 thengit submodule update --init
-
awshepard over 10 yearsArnaldo, thanks for this, this solved the problem I ran into as well.
-
Alexander over 9 yearsRepeat the procedure in .git/config
-
Daniël W. Crompton over 9 years@Alexander I didn't have an issue with .git/config after updating.
-
Nazareno Lorenzo over 9 yearsThis worked for me, but had to run:
git submodule sync
before running thegit submodule update --init --recursive
-
Stealth Rabbi over 8 years@DevinDixon edit your answer to actually explain what you changed.
-
Vladimir Ivanov about 7 yearsThis is actually useful. Even on Windows machine trying to just git submodule update gives you access denied, because no key is actually used.
-
hmedia1 almost 7 yearsThis 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 almost 3 yearsDon't forget to:
git submodule sync
git submodule init
git submodule update
-
Onat Korucu over 2 yearsThe 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.