您的位置:首页 > 科技 > IT业 > 青岛的互联网公司排名_西安的网页设计公司_营销策略怎么写范文_深圳网站关键词排名优化

青岛的互联网公司排名_西安的网页设计公司_营销策略怎么写范文_深圳网站关键词排名优化

2025/2/24 5:08:13 来源:https://blog.csdn.net/LostSpeed/article/details/145584714  浏览:    关键词:青岛的互联网公司排名_西安的网页设计公司_营销策略怎么写范文_深圳网站关键词排名优化
青岛的互联网公司排名_西安的网页设计公司_营销策略怎么写范文_深圳网站关键词排名优化

文章目录

    • git - 克隆带子模块的git工程的方法
    • 概述
    • 笔记
    • 用SSH方式克隆带子模块的git项目url
      • git操作环境
      • 修改git bash命令行提示
      • 修改git bash 窗口标题
      • 升级git bash中的git到最新版本
      • 先用SSH方式克隆项目本身
      • 针对当前git库修改子模块url连接为ssh
      • 循环克隆所有子模块
    • 备注

git - 克隆带子模块的git工程的方法

概述

由于用https方式克隆git库url的网络通讯质量问题,已经知道怎么用ssh方式克隆git库url了。
今天遇到有个git库带子模块,而子模块默认的url是https的。且子模块还有可能带子模块(https url)。
做个试验,让整个git库的url克隆时,都采用SSH方式来弄。

笔记

用SSH方式克隆带子模块的git项目url

假设项目的ssh方式的git url 为 git@github.com:FreeRTOS/FreeRTOS.git

git操作环境

Git Bash // 装了git for windows就有
在Git Bash环境下的好处: 可以用一些linux同名的命令, e.g. sed命令,比自己直接在windows cmd中包含git路径,用git命令的好处多。

修改git bash命令行提示

// 只显示 bash名称 + ➤
PS1='\033[38;5;223m\033[38;5;223mGitBash\033[38;5;110m\033[38;5;110m➤\033[0m\033[0m '

效果
在这里插入图片描述

修改git bash 窗口标题

echo -ne '\e]0;GitBash\a'

效果
在这里插入图片描述

升级git bash中的git到最新版本

// 我当前的git版本为2.47.0, 可以用下面这个命令
git update-git-for-windows// 升级时,要访问github, 请保持网络畅通
// 升级之后为2.47.1.2, 看来我手头的git版本也比较新,不升级也是可以的。
// 在命令行下载完成后,会弹出安装程序,并关掉git bash, 进行UI交互的普通安装。
// 如果自己的git就是最新版本,就只会显示一下,不会去再重复更新

在这里插入图片描述

先用SSH方式克隆项目本身

cd D:\3rd\MCU_prj
或者
cd /d/3rd/MCU_prj

git clone -v git@github.com:FreeRTOS/FreeRTOS.git FreeRTOS_offcial

先将原始库备份一下,方便做其他试验。

针对当前git库修改子模块url连接为ssh

// 必须进入当前git库目录中
cd FreeRTOS_offcial

// 找到所有 .gitmodules 的位置,运行下面指令,将https连接换为ssh连接。
sed -i ‘s|https://github.com/|git@github.com:|g’ .gitmodules

// 更新所有子模块规则
// 然后回到工程根目录,运行如下指令
git submodule sync --recursive

循环克隆所有子模块

让克隆子库时,有进度提示,免得心里慌。
如果项目中的子模块已经被初始化了,带上参数 --init 也没有副作用。
git submodule update --init --recursive --progress

克隆完后,再次查找有没有新的.gitmodules,再执行步骤"针对当前git库临时修改子模块url连接为ssh", 然后执行”循环克隆所有子模块“,直到没有新的.gitmodules出现,那么这个带子模块的工程就克隆完了。这是是手工的步骤,如果子模块自带的.gitmodules比较少,手工弄还可以。
在这里插入图片描述
如果修改完.gitmodules, 升级到配置,然后更新子模块,又带来很多的.gitmodules,再手工弄就够呛了。得写个脚本来弄。

先回到项目得顶层目录
cd /d/3rd/MCU_prj/FreeRTOS_offcial

试验好的git bash脚本

#!/bin/bash# git bash 脚本 - 遍历修改当前目录下得所有 .gitmodules , 替换https 库 url 到 ssh 库 url# 前置操作 : 写好my_task.sh后,给执行权限# chmod 777 ./my_task.sh# 前置操作 : 检查脚本的语法是否正确?# bash -n my_task.sh# 如果没看到输出,就说明脚本语法是正确的# 运行脚本# 进入到脚本的目录# ./my_task.shclearecho "---------- my_task.sh running ----------"# echo "current user:(" $(whoami) ")"# log begin timeecho "begin : ($(date '+%Y-%m-%d %H:%M:%S'))"# =号两边不能有空格file_cnt=0find . -type f -name ".gitmodules" -print0 | while IFS= read -r -d '' file; dodir=$(dirname "$file")(cd "$dir" || { echo "⚠️ dir switch err: $dir"; exit 1; }# echo "finding $(pwd)/.gitmodules"if [ -f "$(pwd)/.gitmodules" ]; thenecho "!!! ($((file_cnt + 1))) was found $(pwd)/.gitmodules, ready to process"sed -i 's|https://github.com/|git@github.com:|g' .gitmodulesgit submodule sync --recursivefi    )file_cnt=$((file_cnt + 1))done# log end timeecho "end   : ($(date '+%Y-%m-%d %H:%M:%S'))"

上一轮更新子模块后,多了一些子模块,共25个。执行 ./my_task.sh
然后再更新子模块

git submodule update --init --recursive --progress执行结果
GitBash➤ pwd
/d/3rd/MCU_prj/FreeRTOS_offcial
GitBash➤ git submodule update --init --recursive --progress
Skipping submodule 'FreeRTOS-Plus/Source/AWS/device-defender/test/unit-test/Unity'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/device-shadow/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/fleet-provisioning/test/unit-test/Unity'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/ota/source/dependency/3rdparty/tinycbor'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/ota/source/dependency/coreJSON'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/ota/test/cbmc/FreeRTOS-Kernel'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/ota/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/AWS/sigv4/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Application-Protocols/coreHTTP/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Application-Protocols/coreMQTT/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Application-Protocols/coreMQTT-Agent/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Application-Protocols/coreMQTT-Agent/source/dependency/coreMQTT/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Application-Protocols/coreSNTP/test/unit-test/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/test/FreeRTOS-Kernel'
Skipping submodule 'FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/tools/CMock'
Skipping submodule 'FreeRTOS-Plus/Source/Utilities/backoff_algorithm/test/unit-test/Unity'
Skipping submodule 'FreeRTOS-Plus/Source/coreJSON/test/unit-test/Unity'
GitBash➤ 
脚本结果都是显示跳过,说明没啥要更新的,也没有错误发生。
看了.gitmodules的数量,还是25个,那么就更新完了。

备注

当前,用SSH方式迁出远端的git工程,如果网络畅通,都一次成功,没发现失败过。
用https迁出工程,没有一次能成功…, 看来,迁出git库url进行学习,只能是采用SSH方式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com