基于 Git Submodule 的代码同步融合方案

1、背景

公司一个业务是基于A项目和B项目的代码融合发布的新版本。其中A项目为主项目,B项目为子项目,现有代码同步方案:

在A项目中运行代码同步脚本(copy.js),需要将脚本中的默认源路径替换成B目录地址,B项目需要切换到需要的分支进行同步。

js 复制代码
const defaultSourceBasePath = 'D:\Project\B项目';

弊端:

  1. 代码同步依赖两个项目切换分支
  2. 修改bug需要两个仓库单独分别提交

整体如下图所示:

如何在一个项目中完成上述操作,可以使用git submodule解决。

2、submodule实践

2.1 什么是submodule

Git Submodule是什么?

Git Submodule 是 Git 内置的一个功能,它允许在一个 "主仓库"(Parent Repository)中嵌入另一个独立的 "子仓库"(Submodule Repository)。子仓库可以是本地仓库,也可以是远程仓库(如 GitHub、GitLab 上的仓库)。

2.2 如何嵌入项目

我们A为主项目,B为子项目。

  1. 添加子项目 git submodule add <子仓库URL> <本地路径>

    1. git submodule add ssh://git@192.168.0.39:3022/A.git 在A项目下B的目录
  2. 克隆项目 git clone --recurse-submodules ssh://git@192.168.0.39:3022/e-commerce/A.git

    1. 注意:不加 --recurse-submodules克隆直接拉取,子项目文件夹会为空需要单独执行命令拉取子项目
  3. 提交代码

    1. 主项目修改提交不影响子项目
    2. 子项目修改提交后,主项目需要额外提交一次commit记录子项目的提交行为

vscode可以直接提交和切换分支:

A项目可以直接提交B项目仓库代码,父仓库只记录子仓库提交的行为。

  1. 拉取代码
    1. 注意拉取代码也是需要主项目重新提交commit,记录变化

    2. 主项目git pull 是不会拉取子项目代码,子项目拉取:

      a. 直接进入子项目文件夹git pull

      b. 主项目下直接执行git submodule foreach git pull

3、总结

最后总结一下,在A项目下使用submodule引用B项目的仓库,同步代码直接使用脚本。

优势是:

  • 无需每个人根据自己目录修改地址
  • 可以随时切换分支进行同步

如有错误,请指正O^O!

相关推荐
yqcoder22 分钟前
[特殊字符] Vue 3 中 Keep-Alive 对生命周期的影响:深度解析
前端·javascript·vue.js
jiayong2327 分钟前
第 33 课:任务看板视图(按状态分列)与本地持久化
开发语言·前端·javascript·学习
GISer_Jing40 分钟前
Dify可视化编排:技术架构与实战指南
前端·人工智能·ai编程
宇宙realman_9991 小时前
DSP28335-FlashAPI使用
linux·前端·python
踩着两条虫1 小时前
VTJ 平台六大设计模式落地实战指南
开发语言·前端·人工智能·低代码·设计模式·重构·架构
Yeats_Liao1 小时前
后台 Sidebar 伸缩交互(PC + 移动端)实现
前端·javascript·css·html5
MXN_小南学前端1 小时前
computed 计算属性详解:触发时机、实战场景、Vue2 与 Vue3 对比
前端·javascript·vue.js
isNotNullX1 小时前
数据大屏怎么做?数据大屏有哪四个核心环节
开发语言·前端·javascript
漫游的渔夫2 小时前
RAG 落地 3 个月,我才发现排序(Rerank)比检索更重要
前端·人工智能
衣乌安、2 小时前
Agent之ReAct
前端·ai