解决github无法拉取submodule子模块的问题

引言

当使用git clone --recursive url 拉取一个配置了子模块的仓库后,会卡住。
同时在使用git clone 拉去httpsurl时,同样可能会出现一直卡在cloning int reposity...本文提供一个简单的脚本来解决该问题。

前置准备

需要配置好git的相关配置,git user.namegit user.emailssh

问题一 使用git clone拉去https协议仓库时卡住

mxnet的仓库为例,如果使用https协议进行克隆,即通过命令https://github.com/apache/mxnet.git,可能会出现卡在cloning into mxnet...的情况。其实解决方法很简单,当将上面https协议的url改成ssh协议即可,即使用命令git clone git@github.com:apache/mxnet.git这样就不会卡住了,但是原理目前并不是很清楚。
注:即使使用ssh进行仓库的克隆,也是需要非常手段。同时需要配置ssh

问题二 拉取submodules时卡住

拉取子模块卡住还是因为在原始仓库中的配置中使用了https协议的仓库链接进行拉取,想要解决实际上只需要将仓库中的.gitmodules文件中的所有子模块的url改成ssh协议进行拉取即可。
修改只需要将url中的https:://github.com/替换成git@github.com:,但是手动修改的话比较麻烦,因为修改之后需要考虑拉取的子模块也会依赖其他子模块的情况,此时则还需要修改,因此本人简单写了一个脚本,通过递归来实现。代码如下:

#!/bin/bashpull_submodule_recursive()
{if [ -f ".gitmodules" ];thenecho ".gitmodules found"# backupcp .gitmodules .gitmodules.bakwhile read linedo# substitude the https with sshecho ${line} | sed 's/https:\/\/github.com\//git@github.com:/g' >> .new_gitmodulesdone < .gitmodulesmv .new_gitmodules .gitmodules# pull current submodulesgit submodule initgit submodule syncgit submodule update# get the directories of current submoduleslocal directories=$(cat .gitmodules | grep path | awk '{print $3}')for directory in $directoriesdoif [ -d $directory ];then# enter the directorypushd ${directory} > /dev/null# pull one submodule and its submodulespull_submodule_recursive# return to the last working directorypopd > /dev/nullfidoneelseecho "current submodule has no submodule, return to last directory..."fireturn 0
}pull_submodule_recursive

脚本的使用方法,以拉取mxnet为例:

  • 首先需要将不含有子模块的mxnet拉取下来,注意需要使用ssh进行拉取,即使用命令:git clone git@github.com:apache/mxnet.git
  • 进入到仓库路径,此时会在当前目录下出现mxnet目录,只需要进入该目录,创建一个文件,将上面的代码拷贝到文件中,这里我们把名字设置为get_submodules_recursive
  • 执行上述脚本,等待子模块拉取完成,一定要使用bash来执行,sh不支持pushdpopd命令会出现错误,即通过命令bash get_submodules_recursive进行执行。

执行效果如下图:
在这里插入图片描述
能够看到此时遍能够成功拉去子模块了,此时git status会显示有新的修改,因为修改了.gitsubmodules文件,不过这个问题不大,如果觉得不想修改的话,只需要根据提示通过git restore命令恢复即可

代码逻辑解释

代码会查找当前目录下的.gitmodules文件,只有找到改文件才回继续进行执行,当找到改文件后,会将改文件中的子模块的url改成ssh协议,更改完成后进行子模块的拉取,拉取后进入到每个子模块中进行检查子模块是否还有子模块…代码会一直重复上述的逻辑,知道所有的子模块全部拉取完成。
也就是代码执行的逻辑与git clone --recursive一致只是在每次拉去的时候需要修改.gitmodles中的url

可悲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23374.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】python手机评论抓取+情感分析(python代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、51CTO技术博主 &#x…

快速排序的非递归实现、归并排序的递归和非递归实现、基数排序、排序算法的时间复杂度

文章目录 快速排序的非递归三数取中法选取key快速排序三路划分 归并排序的递归归并排序的非递归计数排序稳定性排序算法的时间复杂度 快速排序的非递归 我们使用一个栈来模拟函数的递归过程&#xff0c;这里就是在利用栈分区间。把一个区间分为 [left,keyi-1][key][keyi1,right…

TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

文章目录 TypeScript 学习笔记概述TypeScript 开发环境搭建 类型注解类型推断 数据类型JS的7个原始类型Array数组object、Object 和 {}可选属性 ? 和 可选链运算符?. function函数TS类型: any类型 | unknow类型TS类型: void类型TS类型&#xff1a;never类型 &#xff08;几乎…

Signal-iOS 5.9.0编译问题

1.当我们使用pod管理 pod SDWebImage/WebP , 执行 pod install 时,发生报错.先看具体报错 : 截屏2020-07-06 上午11.12.15.png 2.报错产生原因是由于git clone 的地址是 https://chromium.googlesource.com/webm/libwebp,需要FQ 3.不想FQ,可以使用github上的地址https://githu…

vue upload 下载

目录 上传 下载 get post 对象/文件流 download处理返回 文件流 axios.post 封装axios 后端直接返回文件流&#xff0c;打开下载文件是 [object Object]&#xff0c;将res改成res.data即可 1.请求设置类型responseType: blob&#xff08;如果没有设置&#xff0c;打…

蓝牙技术|低功耗蓝牙和LE Audio助力游戏设备行业发展

去年&#xff0c;蓝牙技术联盟官方宣布推出LE Audio&#xff0c;它以BLE为基础&#xff0c;旨在更好地兼顾音频质量和低功耗&#xff0c;以在多种潜在应用中显著增强用户体验。这在游戏行业中引起了轰动&#xff0c;由于其延迟显著降低&#xff0c;LE Audio在增强游戏体验方面展…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 14 日论文合集)

文章目录 一、检测相关(6篇)1.1 LVLane: Deep Learning for Lane Detection and Classification in Challenging Conditions1.2 Garbage in, garbage out: Zero-shot detection of crime using Large Language Models1.3 Robotic surface exploration with vision and tactile …

asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

文章目录 系列文章1.项目搭建1.1 新建Asp.net core webapi项目1.2 配置连接Mysql1.3 实现对mysql数据库的数据增删改查&#xff0c;接口1.3.1 根据id查询数据1.3.2 根据用户名模糊查询数据&#xff0c;并分页1.3.3 新增用户数据1.3.4 修改用户数据1.3.5 根据ID删除数据1.3.6 接…

【5G PHY】5G 调制与编码策略(MCS)介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Redis对象结构 — RedisObject

目录 Redis 键值对数据库的全过程​编辑 RedisObject结构体 Redis的encoding编码方式 type对应的数据对象类型 Redis 键值对数据库的全过程 redisDb 结构&#xff0c;表示 Redis 数据库的结构&#xff0c;结构体里存放了指向了 dict 结构的指针&#xff1b;dict 结构&#…

Day_63-65 集成学习之 AdaBoosting

目录 Day_63-65 一. 基本概念介绍 1. 集成学习 2. 弱分类器与强分类器 二. AdaBoosting算法 1. AdaBoosting算法框架介绍 2. AdaBoosting算法过程 三. 代码的实现过程 1. WeightedInstances类 2. 构造弱分类器的StumpClassifier类和抽象类SimpleClassifier 3. 主类Booster的…

Unity 之 超级详细的隐私问题解决方案

Unity 之 助力游戏增长 -- 解决隐私问题 一&#xff0c;平台测试隐私问题二&#xff0c;解决方式一2.1 勾选自定义Mainifest2.2 修改自定义Mainifest2.3 隐私协议弹窗逻辑 三&#xff0c;解决方式二3.1 导出安卓工程3.2 创建上层Activity3.3 配置AndroidManifest 四&#xff0…