遇到的问题
- A,B两个项目中有很多公用静态资源
- 静态资源包括 js插件,基础组件,业务组件,图片,文档…
- 使用npm管理 会使项目复杂化 ,新增组件调试流程复杂,静态资源上传到npm后下载安装包会很慢
准备工作
-
打开github
-
新建仓库 gittest3
-
新建仓库 gittest3child

添加子模块
-
拉取代码gittest3
-
执行git命令
git submodule add https://github.com/xbcc 123/gittest3child.git结果如下图$ git submodule add https://github.com/xbcc 123/gittest3child.git Cloning into 'F:/desktop/gitTest3/gittest3/gittest3child'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3) eceivinremote: Counting objects: 100% (3/3), done. % (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 warning: LF will be replaced by CRLF in .gitmodules. The file will have its original line endings in your working directory
修改
- 提交gittest3项目会看到子模块与项目建立了关联

- 现在修改gittest3Child文件提交到git, 会看到gittest3项目多出一个diff文件

-
再次提交gittest3项目到git仓库,与子项目建立新的版本关联

-
结论:当项目版本发生回退时,还是可以通过commit信息自动找回指定模块的文件
协作
- 给
git clone命令传递--recurse-submodules选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。
# eg:
git https://github.com/xbcc123/gittest3.g
it -recurse-submodules
- 如果你已经克隆了项目但忘记了
--recurse-submodules可以使用git submodule update --init --recursive来手动更新项目中的子模块
切换分支
-
如果你创建一个新分支,在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录; 如果你移除它然后切换回有那个子模块的分支,需要运行
git submodule update --init来重新建立和填充 -
正确的操作方式
-
使用–recurse-submodules让子模块处于正确的状态
git checkout --recurse-submodules master -
推荐: 设置config submodule.recurse全局将所有带有submodule.recurse的命令默认带上–recurse-submodules
git config submodule.recurse true
-
引用
本文探讨了在A、B两个项目中使用子模块管理共用静态资源的方法,避免了npm管理带来的复杂性和效率问题。通过git submodule命令,详细介绍了如何添加、更新、切换分支时处理子模块,以及如何设置配置项简化工作流程。
1968

被折叠的 条评论
为什么被折叠?



