架构优化——submodule转为subtree

文章目录

  • 背景
  • subtree优势
  • submodule切换到subtree脚本
  • subtree使用
    • 切开发分支
    • 推送代码
    • 同步代码

背景

submodule过多,目前20个submodule需要切出20个分支,查看提交记录、切分支等使用起来麻烦。

团队深受困扰!

subtree优势

  1. 继承submodule的优点,基础功能仓库,可被其他多个仓库同时使用
  2. 开发时,不需要再切n个分支,也不需要提到不同仓库,只需要往主仓库推送即可,一个仓库一个分支,搞定日常开发,让开发工作更愉快
  3. 代码合并时,不需要再合那么多子仓库

submodule切换到subtree脚本

可以一键切换,但是要注意m_branch的更改,更改为子模块你想追踪的分支名

#!/bin/bash
# set -e
m_branch="release/3_5_6_2"
cat .gitmodules | while read i; doif [[ $i == \[submodule* ]]; thenecho converting $iread impath=$(echo $i | grep -E "(\S+)$" -o)echo path: $mpathread imurl=$(echo $i | cut -d= -f2 | xargs)echo url: $murlmname=$(basename $mpath)echo name: $mname# 先获取 commit,必须在 git rm 之前mcommit=$(git ls-tree HEAD "$mpath" | awk '{print $3}')echo commit: $mcommitgit submodule deinit -f "$mpath"echo "11"git add .git commit -m "#40664 Stage .gitmodules changes before removing submodule"git rm -r --cached "$mpath"echo "22"rm -rf "$mpath"echo "33"git config -f .gitmodules --remove-section "submodule.$mpath" || trueecho "44"git config --remove-section "submodule.$mpath" || trueecho "55"git commit -m "#40664 Removed $mpath submodule at commit $mcommit"echo "66"if ! git remote get-url "$mname" &>/dev/null; thengit remote add "$mname" "$murl"fiecho "77"# git fetch "$mname"# 用 commit 创建临时分支并用它 add subtree# git branch -f "_$mname" "$mcommit"echo "88"git add .git commit -m "#40664 Save changes before subtree add"echo "mpath:$mpath murl:$murl  m_branch:${m_branch} "git subtree add --prefix="$mpath" "$murl" "${m_branch}"echo "99"# git branch -D "_$mname"echo "10"git commit -m "#40664 Converted $mpath submodule to subtree"echo "11"git push origin "${m_branch}"echofi
donegit rm -f .gitmodules
git commit -m "#40664 Removed .gitmodules after converting submodules"

subtree使用

接入subtree后,日常开发提交代码,切分支等,都只对主仓库进行操作,日常使用起来,就只是主仓库。

更新的内容也只在主仓库生效(默认子仓库不会同步更新)

如需单独更新子模块仓库,需要用特殊的命令

切开发分支

git checkout -b  feature/3553_xzx_subtree
git push origin  feature/3553_xzx_subtree
# 以上即可开始开发

推送代码

git add 修改文件
git commit -m "修改内容"
git push origin  feature/3553_xzx_subtree
# 以上即可推送修改到云端(只会更新quicktron仓库),然后直接打包即可,会把提交的修改带上

如果需要单独推送子模块仓库(只开发quicktron,是不需要做这一步的

例如params_api未来可能被quicktron以及算法那边的仓库共同使用,我们在params_api修复了bug,则需要推送到子模块仓库中去,让算法那边也可同步到我们的修改,则使用以下命令:

git subtree push --prefix=src/nav_process ssh://git@gitlab.flashhold.com:10022/hardware/upper_computer/basic/nav_process.git feature/3553_xzx_subtree

同步代码

git pull origin release/3_5_5_3
git push origin  feature/3553_xzx_subtree
# 以上即可同步最新修改到本地,并且推送到quicktron仓库

如果需要单独更新某个子模块(只开发quicktron,是不需要做这一步的

例如params_api被算法那边修复了bug,并且已经推送到对应子仓库了,那我们需要同步最新修改到qucktron

则使用以下命令:

git subtree pull --prefix=src/params_api ssh://git@gitlab.flashhold.com:10022/hardware/upper_computer/basic/nav_process.git release/3_5_5_3
git push origin  feature/3553_xzx_subtree

在submodule初步切为subtree这段时间,可能有原先是submodule形式的提交,在nav_process子仓库上的修改,需要同步到subtree形式的主线上,则也是使用以上指令。

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

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

相关文章

车载软件架构 --- 汽车中央控制单元HPC软件架构方案实例

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

零基础开始的网工之路第二十一天------性能优化

目录 一、性能优化概述 二、性能监控工具 1. 基础工具 2. 高级工具 三、子系统优化策略 1. CPU优化 2. 内存优化 3. 磁盘I/O优化 4. 网络优化 四、资源限制优化 1. ulimit 2. cgroups(控制组) 五、安全与注意事项 六、综合案例 案例1&…

【Google Chrome】谷歌浏览器历史版本下载

最新版: Chrome for Testing availability 谷歌浏览器 Chrome 最新版离线安装包下载地址 v137.0.7151.104 - 每日自动更新 | 异次元软件 历史版本: Download Google Chrome 105.0.5195.102 for Windows - Filehippo.com chrome浏览器,chrome插件,谷…

线性表实训(头歌实践平台课程答案详细解说)

C 和 C 支持 4 种基本数据类型(整型、浮点型、字符型、布尔型)和 3 种复合型数据类型(数组、指针、结构)。复合类型的数据对于数据结构至关重要,因为从某种程度上来说数据量的多少和数据结构的好坏决定了程序的复杂程度…

【前端】threeJS学习(长期更新)

简介 Three.js是用JavaScript编写的第三方库,用于实现3D功能,基于WebGL进行封装。 一个3D模型的建立主要由以下几个部分组成(基本版): * 创建场景scene--相机camera--渲染器renderer--(灯光light); *…

Linux系统--权限

大家好,上一次我们学习了关于Linux中的基础指令,那么我们今天来继续学习Linux的新的内容:权限。那么话不多说,我们开始今天的学习: 目录 Linux权限 1. Linux权限的概念 2. Linux权限管理 3. ⽂件权限值的表⽰⽅法…

论文笔记 <交通灯> <多智能体>DERLight双重经验回放灯机制

今天看的论文是这篇 主要提出了传统优先级经验回放(PER)在复杂交通场景中效率低下,使用二叉树存储样本,导致大规模样本时计算复杂度高。而且不丢弃样本,造成存储空间浪费。 双重经验池: 为了解决以上问题…

Chromium 136 编译指南 macOS篇:环境准备与系统配置(一)

1. 引言 在浏览器技术的星空中,Chromium 犹如一颗最亮的明星,照亮了整个互联网的发展轨迹。作为推动现代 Web 技术革命的核心引擎,Chromium 不仅是 Google Chrome 的技术基石,更是 Microsoft Edge、Opera、以及众多定制浏览器的共…

linux机器间无密码如何传输文件

1. scp传输时的问题 $ scp deepseek_r1_distill_qwen1.5b_content_audit_fp16_20250613_2_Q4_K_M.gguf xxx192.168.xxx:/home/xxx/pretrained_model/output The authenticity of host 192.168.xxx (192.168.xxx) cant be established. ED25519 key fingerprint is SHA256:deOs…

PySpark 使用pyarrow指定版本

背景说明 在 PySpark 3.1.3 环境中,当需要使用与集群环境不同版本的 PyArrow (如 1.0.0 版本)时,可以通过以下方法实现,而无需更改集群环境配置 完整操作说明 去pyarrowPyPI下载对应版本的whl文件后缀whl直接改成zip解压后有两个文件夹&am…

安卓APP投屏调试工具使用教程

安卓APP投屏调试工具使用教程 一、准备工作(一)下载ADB工具(二)配置ADB的环境变量(三)检查是否成功安装(四)adb核心命令说明 二、无线调试流程(一)环境要求&a…

huggingface网站里的模型和数据集

直接下载肯定是不太行,平时访问都不容易,更别提下载东西了,但是我们可以通过国内镜像进行快速下载。 镜像网址: hf-mirror地址:HF-Mirror 进入网站之后,在搜索框里搜索你想下载的内容,接下来…

Node.js 路由请求方式大全解:深度剖析与工程实践

文章目录 🌐 Node.js 路由请求方式大全解:深度剖析与工程实践一、📜 HTTP 请求方法全景图🏆 核心方法深度对比HTTP 请求方法概念对比表🛠️ 特殊方法应用场景 二、🎨 各方法深度解析1. GET - 数据查看器&am…

JS-实现一个链式调用工具库

要求: 支持链式调用,如:_chain(data).map().filter().value()实现map、filter、等常用方法支持惰性求值(延迟执行、直到用到value()时才真正计算)。 链式调用的实现原理的关键点是:函数执行完以后&#x…

【人工智能数学基础】实变函数与泛函分析

数学分析、解析几何、高等代数、实变函数、常微分方程、近世代数、微分几何、复变函数、点集拓扑、概率论、数理统计、数理逻辑、偏微分方程、泛函分析、动力系统、数学物理方程、数论导引、群与代数表示、微分流形、代数拓扑、代数几何、金融数学、多元统计分析、应用随机过程…

css3 背景色渐变

在 CSS 中,使用渐变色需要用到 gradient 属性,而 gradient 属性分为 线性渐变 linear-gradient 与 径向渐变 radial-gradient。今天主要是说一下 linear-gradient 线性渐变属性。 例如:background: linear-gradient(90deg, #e7f1fc, #f5f9fb…

将图片合成为视频(基于 OpenCV)

本文将介绍如何使用 Python 和 OpenCV 将一组图像文件合成为一个视频文件。你将学会: 使用 os 模块遍历文件夹中的图像 使用 cv2.VideoWriter 写入视频 设置分辨率与帧率参数 对图像尺寸进行统一处理 简单的视频生成应用开发 1. 所需模块与安装 本章需要以下 …

HanLP 使用教程:从安装到实战应用

HanLP 使用教程:从安装到实战应用 HanLP 是由hankcs开发的一款高效、多功能的中文自然语言处理(NLP)工具包,支持分词、词性标注、命名实体识别(NER)、依存句法分析、关键词提取、文本摘要等任务。本教程将…

MySQL 分组函数全面详解与最佳实践

MySQL 分组函数全面详解与最佳实践 MySQL 分组函数(聚合函数)的核心知识、注意事项和高级应用技巧: 📊 分组函数核心列表 函数描述示例COUNT()计算行数COUNT(*)SUM()计算数值总和SUM(salary)AVG()计算平均值AVG(score)MAX()获取…

华为OD 最小循环子数组

1. 题意 给定一个由若干整数组成的数组 nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。 2. 题解 利用 k m p kmp kmp中的 n e x t next next数组性质,我们可以求出 n u m s nums nums中的最长公共 前缀后缀…