git submodules 是为了多个项目(模块)都能够及时更新到最新的公共资源,解决需要把最新代码拷贝到各个项目的痛点。刚好最近公司开发的产品需要分为各个版本,但是主体功能一致,所以点上 git submodules 的技能点。对于 vue 项目,公共库可以分为 pages、components、styles 等几个目录。
¶一、准备项目
这篇随笔暂时只记录多个项目使用一个公共库的过程。
准备好公共库(以 git-public 为例,称为子模块),准备好使用子模块的项目若干(以 git-a 和 git-b 为例,称为主项目)。
¶二、为主项目添加 submodules
¶2.1、主项目初次引入
在 git-a 主项目下执行:git submodules add <url> <path>
1 | git submodules add https://github.com/liuxy0551/git-public.git src/submodules |
¶2.2、多人协同
¶2.2.1、clone
如果你是第一次在项目中引入子模块的开发人员,那么项目新加入的成员可以按照以下方法 clone 带有 submodules 的项目:
1 | git clone https://github.com/liuxy0551/git-a.git |
或:
1 | git clone --recursive https://github.com/liuxy0551/git-a.git |
--recursive
代表 clone 项目的同时 clone 关联的 submodules。
¶2.2.2、pull
如果你是第一次在项目中引入子模块的开发人员,那么项目的其他成员可以按照以下方法 pull 到带有 submodules 的项目:
1 | git pull origin <当前分支> |
¶三、获取、更新子模块代码
¶3.1、获取子模块代码
在主项目中的子模块路径下执行:
1 | git pull origin master |
多个子模块可在主项目路径下执行:
1 | git submodule foreach git pull origin master |
¶3.2、更新子模块代码
¶3.2.1、在子模块项目中更新
按照正常的 git 项目更新提交代码,其他开发成员获取参照3.1、获取子模块代码
¶3.2.2、在主项目中更新子模块的代码
在子模块路径下
按照正常的 git 项目更新提交代码,其他开发成员获取参照3.1、获取子模块代码
。主项目的代码应在子模块的代码提交后再提交,否则主项目检测不到子模块具体的变动。
¶四、删除 git submodules
删除公共库的步骤较为复杂,如下:
¶1、删除公共库目录及代码
1 | rm -rf src/submodules |
¶2、删除(更改)子项目根目录下的 .gitmodules
1 | rm -rf .gitmodules |
¶3、删除(更改).git/config 文件中的公共库部分
1 | // .git/config |
¶4、删除模块下的公共库目录
1 | rm -rf .git/modules/src |