Ubuntu下解决拉取submodule子模块问题


前言

在安装Carto的SLAM源码时,执行拉取子模块命令 git submodule update --init --recursive,报错链接失败,无法拉取仓库
Cartographer安装教程,参考大佬文章:

https://blog.youkuaiyun.com/qq_53004665/article/details/142057918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d916f455bd424a41e466335046736fc5%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=d916f455bd424a41e466335046736fc5&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-142057918-null-null.142v101pc_search_result_base7&utm_term=Cartographer&spm=1018.2226.3001.4187

解决过程中不断有新问题的出现,简单记录一下解决过程

一、解决子模块无法拉取问题

参考文章1:

https://blog.youkuaiyun.com/qq_45523675/article/details/131661935

在安装Cartographer时,博主在安装protobuf3时,出现无法拉取子模块的问题。

报错是连接失败,应该是网络的问题,因为博主没有科学上网,git clone也会连接失败,所以拉取子模块也会因为网络问题失败。

以下是git clonegit submodule update --init --recursive过程以及出现的问题

1.1首先gitclone

由于网络原因,直接gitclone会拒绝连接;所以采用以下两种之一进行git:

git clone https://gitclone.com/github.com/...

或

git clone https://git@github.com/...

protobuf3要指定版本,所以博主执行代码为

git clone -b v3.6.0 https://gitclone.com/github.com/protocolbuffers/protobuf.git

1.2拉取子模块

执行命令行:

cd protobuf3
git submodule update --init --recursive

出现网络问题的报错
fatal: 无法访问 'https://github.com/googlecartographer/cartographer_ros.git/':Failed to connect to github.com port 443: 拒绝连接


1.3具体解决拉取子模块问题

参考了大佬文章,即上面的参考文章1,过程如下:
1.在protobuf3目录下创建文件get_submodules_recursive

cd protobuf3
touch get_submodules_recursive

2.将一下代码复制进get_submodules_recursive中:

#!/bin/bash

pull_submodule_recursive()
{
    if [ -f ".gitmodules" ];then
        echo ".gitmodules found"
        # backup
        cp .gitmodules .gitmodules.bak
        while read line
        do
            # substitude the https with ssh
            echo ${line} | sed 's/https:\/\/github.com\//git@github.com:/g' >> .new_gitmodules
        done < .gitmodules
        mv .new_gitmodules .gitmodules
        # pull current submodules
        git submodule init
        git submodule sync
        git submodule update
        # get the directories of current submodules
        local directories=$(cat .gitmodules | grep path | awk '{print $3}')
        for directory in $directories
        do
            if [ -d $directory ];then
                # enter the directory
                pushd ${directory} > /dev/null
                # pull one submodule and its submodules
                pull_submodule_recursive
                # return to the last working directory
                popd > /dev/null
            fi
        done
    else
        echo "current submodule has no submodule, return to last directory..."
    fi
    return 0
}

pull_submodule_recursive

3.执行上述脚本,要用bash来执行

bash get_submodules_recursive

1.4拉取子模块出现新的问题

博主在执行bash get_submodules_recursive时,出现报错: ssh: connect to host github.com port 22: Connection refused

解决方法见下一章

二、解决报错:ssh: connect to host github.com port 22: Connection refused

参考文章2:

https://zhuanlan.zhihu.com/p/521340971
https://blog.youkuaiyun.com/weixin_44417398/article/details/123339964

参考了某乎的文章,涉及到了vim的使用

1.解决的方法

$ vim ~/.ssh/config
##add section below to it,
##'i' is insert,':wq' is save and quit
Host github.com
  Hostname ssh.github.com
  Port 443

然后执行命令行验证是否成功

$ ssh -T git@github.com
Hi xxxxx! You've successfully authenticated, but GitHub does not
provide shell access

如果提示Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access就一切正常了。

2.遇到的问题

博主在执行vim ~/.ssh/config时复现博主的虚拟机ubuntu内没有.ssh文件,所以无法解决本章的问题
.ssh问题由第三章描述解决方法

三、解决Ubuntu没有.ssh文件

参考文章3:

https://blog.youkuaiyun.com/weixin_44417398/article/details/123339964

按照文章一步一步进行就行,但是博主最后一步执行ssh -T git@github.com时报错
尝试按照第一章方法进行拉取子模块时,报的是相同的错
但是现在有了.ssh文件,所以博主尝试再按照第二章的方法更改.ssh下的config文件,之后再执行ssh -T git@github.com,返回Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access
所有问题解决!

总结

本文记录了博主在安装cartographer算法时,出现的一系列问题的解决过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值