问题出现
今天下载 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