Fatal Error when updating submodule using GIT

谁说胖子不能爱 提交于 2020-11-30 02:21:10

问题


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 'git@github.com: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.)


回答1:


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 = git@github.com: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.




回答2:


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



回答3:


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'




回答4:


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.




回答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




回答6:


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 git@github.com. 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




回答7:


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.




回答8:


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



来源:https://stackoverflow.com/questions/8197089/fatal-error-when-updating-submodule-using-git

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!