遇到的问题
- 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
-
引用