git submodule解决多包协作

  • 项目背景
  • 解决方案
    • monorepo
    • submodule
      • 常用命令
      • 如何使用
        • 克隆已有字模块项目
        • 为现有项目添加子模块仓库
          • 修改子模块
          • 删除子模块

项目背景

当项目A开发到一定量级之后,往往需要将多个子模块进行拆分,我们希望各个子模块独立,减小相互间的影响。同时有需求需要在这个项目的基础上,另起一个项目B,将部分功能剔除,A和B交集的功能需要同步更新。拆分之后,我们会面临如下问题:

  • 如何处理子模块的依赖
  • 依赖更新后同步的问题

解决方案

monorepo

业界首推的是采用monorepo,将相关的模块用单一的仓库统一管理,前端技术方向大势所趋,该方案需要我们将工程的多个组件抽象成npm包,通过npm install的方式引入依赖。该方案优缺点:

  • 抽成组件之后,获取依赖简单,npm install就能处理。
  • 简洁,前端前沿方案。
  • 对于进行已久的老项目需要比较清晰的设计与抽离子模块,工作量大。

submodule

通过npm包的方式是前端项目的一个比较好的解决方案,但相对于成型效果比较好的monorepo,git自带的submodule更贴切人少工作量大的团队,是一种通用的解决方案。
submodule的方式需要我们先将要抽离的子模块放到不同的git仓库。在主项目的.gitmodules中写明引用的仓库,就能够同步关联子模块。

常用命令

git clone <repository仓库地址> --recursive //递归的方式克隆整个项目,子模块也会克隆
git submodule add <repository子模块仓库地址> <path想要放置在主项目路径> //添加子模块
git submodule update --recursive --remote //拉取所有子模块的更新

如何使用

克隆已有字模块项目

当我们直接克隆一个带有子模块仓库的项目时:

git clone git@xxxx.git --recursive //递归的方式克隆整个项目,子模块也会克隆

然后更新所有子模块:

git submodule update --recursive --remote //拉取所有子模块的更新

为现有项目添加子模块仓库

创建一个仓库放置 utils模块(比如utils文件夹,需要放在src目录下),在主项目中执行

git submodule add git@xxxx.git ./src/utils //添加子模块

就可以在项目中添加子模块,主项目中的.gitmodule文件会增加该模块的标识。(想要成功添加utils文件夹,必须原来目录下没有utils文件夹)

[submodule "/src/utils"]url = /Users/nick/dev/nick-doc/testGitSubmodule/utils.git
修改子模块

一般来说,不同的仓库的文件应该在不同的工作目录下修改,但是实际情况下,子模块A的效果必须在主项目的工作目录下调试,才能进行开发,这就导致了修改 子模块A的某个文件,会引起主项目和子模块git检查的变化。这种情况,只需在主项目.gitignore文件添加上子模块的目录即可,如/src/utils。完成修改子模块之后,在子模块的目录将该修改提交至远程。
然后在主项目拉取子模块的更新:

git submodule update --recursive --remote //拉取所有子模块的更新

这时主项目的git会检查到刚刚提交的子模块的提交记录发生更改,正常的在主项目下 commit和push即可。这样主项目就便将最新的子模块引用提交到最新。

删除子模块
 git submodule deinit /src/utils git rm -f /src/utils rm -rf .git/modules/src/utils

删除子模块后.gitmodule文件里就会对/src/utils的索引删除了。

注:

  1. 使用gitmodule会遇到的问题

git submodule解决多包协作相关推荐

  1. PX4环境git submodule update --init --recursive失败的解决办法

    最近开始搭建PX4环境,搭建是需要从github下载工程,然后使用语句git submodule update --init --recursive更新工程子模块,但往往由于网络原因这一步需要很久,甚 ...

  2. Git submodule did not contain解决办法

    现象: 使用git submodule update遇到did not contain a6b9...... 原因: 子仓库提交了两个commit,一个是A,另外一个是a6b9.(没有push到远端) ...

  3. Git submodule 知识总结

    文章出自个人博客 https://knightyun.github.io/2021/03/21/git-submodule,转载请申明 概念 先引用 git 的官方定义描述: A submodule ...

  4. [转]使用Git Submodule管理子模块

    本文转自:https://blog.csdn.net/qq_37788558/article/details/78668345 实例代码: 父项目:https://github.com/jjz/pod ...

  5. npm install mysql 报错_npm遇到的问题--npm install 执行报错 /bin/git submodule update -q --init --recursive...

    1.执行npm i 安装依赖时,报错:cannot read property 'match' of undefined 据说是npm本地缓存导致 解决方案: rm -rf package-lock. ...

  6. 玩转GIT系列之【git submodule update出错提示子模组未对路径注册】

    今天在github上找到了一个很有意思的项目,叫做listen1[https://github.com/listen1],它是一个开源的项目,可以从各大音乐网站自动化搜索歌曲.避免某个特定的网站因为版 ...

  7. Git实战技巧-多人协作开发出现代码冲突,如何合并代码

    Git实战技巧-多人协作开发出现代码冲突,如何合并代码 1.企业场景 小智和小黑两个人交叉修改同一个文件,这个时候小智修改完提交.问题来了,如果小智提交成功,那么就相当于忽略了小黑提交的内容.这个时候 ...

  8. Git submodule 采坑

    Git submodule 采坑 使用git submodule update --init 时遇到错误:error: Server does not allow request for unadve ...

  9. Git submodule添加子项目/库

    开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情.git submodule命令就可以解决这个问题. Git归并策略 Git归并 ...

最新文章

  1. 博科VP:闪存推动了与之相匹配的第六代FC的发展
  2. java float 四舍五入_JAVA如何把一个float四舍五入到小数点后指定位数.
  3. c语言排序系统代码怎么写,排序概述(c语言)(示例代码)
  4. 【NOIP2011 Day 2】观光公交
  5. PHP通过PDO连接Microsoft Access数据库
  6. 怎样提高WebService性能大数据量网络传输处理(转)
  7. window.open怎么设置title_企业seo怎么优化 都有那些策略?
  8. 重装服务器,解决怪问题
  9. 腾讯地图拾取坐标html,GitHub - cloydlau/coord-picker: 高德/腾讯地图坐标拾取器 / A coordinates picker for amap/tmap...
  10. cad2019菜单栏怎么调出来_cad怎样调出菜单栏(cad2016工具栏怎么调出来)
  11. stokes方程matlab,【Fluent】雷诺方程:推导与求解(附MATLAB代码)
  12. Reinforcement Learning——Chapter 2 Multi-armed Bandits
  13. matlab实例一之Forward Collision Warning Using Sensor Fusion (视觉和毫米波雷达)
  14. Origin 2017 调整默认字体的方法
  15. 越王勾践剑“千年不腐”传奇
  16. No executable file specified.Use the “file“ or “exec-file“ command.
  17. matlab-行相加、列相加
  18. XGBoost参数调优完全指南(附Python代码)
  19. xming Error: Can‘t open display:
  20. 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程

热门文章

  1. 用 Python 打扑克牌——炸金花
  2. 淘宝/天猫、拼多多、1688产品详情页API、SKU信息获取展示
  3. SystemTap使用技巧【二】
  4. Linux Glibc幽灵漏洞紧急修补方案【转】
  5. PVE 下解决 iKuai 断流、重启问题
  6. 二维码扫描器 android二维码扫描 二维码识别软件
  7. 【必看干货】在我面了10多家大厂(上岸)后,我吐血总结你要是这12道题都不能拿满分,那你就与大厂算法无缘了 ——AI视觉算法工程师
  8. 吴恩达机器学习第二周编程题参考答案
  9. 大数据新闻生产的实践与反思
  10. 【总结】解决MAPPO(Multi-Agent PPO)问题技巧