我正在尝试更新这个git repositary的子模块但是我一直遇到致命的错误:
[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
或者这样
[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
为什么会发生子模块的任何想法?回购是这个:
https://github.com/ProdigyView/ProdigyView
(如果我不尝试将子模块克隆为子模块,则可以克隆子模块。)
答案 0 :(得分:71)
问题是git找不到从服务器下载repo所需的公钥,解决方法是使用公共URL。
在文件.gitmodule中,您将找到以下条目:
[submodule "example"]
path = example
url = git@github.com:webhat/example.git
需要将URL更改为模块的公共URL:
[submodule "example"]
path = example
url = https://github.com/webhat/example.git
正如您所看到的,前缀 git @ 已更改为 https:// ,并且中缀:变为 / < /强>
修改强>
在您自己的存储库中,您可能需要使用git://
而不是https://
我之前的回答并不清楚,所以我补充说。
编辑2:
如果您发现需要运行git submodule sync
或需要编辑.git/config
才能使其生效,您可能已经为子模块设置了遥控器。
答案 1 :(得分:35)
如果它可以帮助某些人:
我更新了我的.gitmodules
[submodule "example"]
path = example
url = https://github.com/webhat/example.git
然后我也更新我的.git / config
[submodule "example"]
url = https://github.com/webhat/example.git
就像你们之前说的那样(我感谢你)。
然后我更新我的.git / modules / example / config
[remote "origin"]
fetch = [...]
url = https://github.com/webhat/example.git
要完成我
git submodule sync
git submodule init
git submodule update
答案 2 :(得分:4)
您可以在Build - &gt;中手动传入密钥。 &#34;执行shell&#34;詹金斯工作部分:
ssh-agent bash -c 'ssh-add {path_to_private_key}; git submodule update --init --recursive'
示例:
ssh-agent bash -c 'ssh-add /var/lib/jenkins/.ssh/jenkins_rsa; git submodule update --init --recursive'
答案 3 :(得分:2)
在我的.bash_profile(在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
}
一个班轮:
sed -E -i.bak -e "s/(url *= *)(.*:)(.*)/\1https:\/\/github.com\/\3/g" .gitmodules ; git submodule sync ; git submodule update --init --recursive
vim搜索/替换:
%s/\(url\s*=\s*\)\(.*:\)\(.*\)/\1https:\/\/github.com\/\3/
基于Daniël答案的基础解决方案
答案 4 :(得分:1)
我有同样的问题。但是,在我的情况下,团队希望使用.gitmodules中的SSH访问,因此修改URL以使用http://不是一个选项。
最终,我的问题是有一个不正确的〜/ .ssh / config文件。配置文件有一些错误的设置,所以每次我真的想访问git@github.com时,我实际上都试图访问不正确的服务器。我通过执行以下命令找到了这个:
ssh -vT git@github.com
第三行应该这样说:
debug1: Connection to github.com [<ip address>] port <port num>
如果您没有尝试连接到github.com,那么您的配置文件会让您偏离正轨。
原来我无论如何都不需要配置文件中的任何内容,所以我可以安全删除它。如果你想维护一个配置文件,这里有一篇很好的文章:
http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/
此外,这些GitHub文档确实帮助我调试了我的问题:
https://help.github.com/articles/error-permission-denied-publickey
https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist
答案 5 :(得分:0)
添加新答案而不是进行编辑,以便所有人遇到与我以前相同的问题。
我完全相反。专用Bitbucket存储库和子模块用于工作。总是出现此错误...
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
我必须手动进入.git / config文件并更新它:
[submodule "submodule-name"]
url = https://bitbucket.org/companyname/submodule-repo.git
与此:
[submodule "submodule-name"]
url = git@bitbucket.org:companyname/submodule-repo.git
不确定如何设置它,以便我和我的所有同事都可以使用该子模块而无需进行调整,但使我摆脱了几个月的苦苦挣扎。
答案 6 :(得分:-4)
想出来。 .gitmodule文件中的路径无法下载子模块。