解决git submodule clone时问题的服务器认证问题

问题出现

今天下载 git repo遇到一些问题,因为平时使用习惯的问题造成的一些问题。
平常个人使用github或者gitee,都习惯用https下载。

git clone https://.../xxxx.git

今天下载的repo包含了submodule,直接clone

git clone https://.../xxxx.git  --recursive

或者,单独下载子模块

cd xxxx
git submodule update --init --recursive

过程中连续遇到了几个github连接失败,简单做个记录。

Host key verification failed

首先是 Host key verification failed问题,是远程主机验证失败,起初以为是github登陆问题,于是在浏览器登陆了github,还是没有解决问题。
后来从网上找到了解决方案 Host key verification failed.解决方案,主要原因是本地保存的远程主机key和实际的远程主机key不一致。具体操作如下:

ssh-keygen -R github.com #删除现有known_hosts中保存的远程主机key
ssh -T git@github.com

这是再下载子模块,又出现了新问题。

Permission denied (publickey)访问权限

此时又出现了新的问题Permission denied (publickey),于是又找到了如下的解决方案。
出现git@github: Permission denied (publickey)的解决方法

ssh-keygen -t rsa -C "username"  # username可以随意填写,一般写用户名或电子邮件

用文本编辑器打开id_isa.pub(如果生产key时输入了文件名,则用相应的*.pub文件,把内容复制到github --> settings --> SSH & PGP keys --> New SSH key 的编辑框中,保存,再更新submodule就可以了。

除了以上方法,还可以修改子模块的url,不用在github上增减公钥也能够下载子模块:

clone失败时

打开.gitmodule修改相关子模块的url,例如

[submodule "path/to/submodule"]  
    path = path/to/submodule  
    url = https://github.com/user/submodule-repo.git
    # git@修改为https://

再执行,同步指令,更新子模块的url

git submodule sync

或者手动逐个修改
.git/config
.git/modules/path/to/sub_mod/config
文件中的url

小结

git submodule的子模块管理上存在一些问题,应为用户的使用习惯不同,在加入git submodule时,可能使用了git@…的下载方式,如果你恰巧习惯使用https下载时,就会出现认证失败的问题。
解决的流程

1. git clone https://..../xxxx
2. cd xxxx
3. vi .gitmodules #替换子模块的下载url
4. git submodule sync
5. git submodule update --init --recursive
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值