Vue工程使用git添加submodule公共库的项目实践
-
Vue的使用,一直在路上!
-
Git的使用,一直在路上!
-
Git submodule的使用,开始并将一直使用!(旨在解决多工程使用公共库代码的方式,且不必每个客户端都包含该库,亦可保持公共库代码提交的独立性。)
一、 说明
- 假设submodule公共库的gitlab地址:ssh://git@y:8080/submodule.git,且submodule公共库已有公共代码内容,此公共库和项目工程代码提交保持一致。
- 添加submodule公共库均为全量添加,即增加公共库后submodule的内容会全部存在而非部分存在。
- 若在已有工程引入公共库,且项目工程已包含公共库内容,建议在使用公共库前将项目工程内容和公共库内容进行对比,以免更改后引入的无效或丢失项目工程内容。且建议:如非必要,尽量修改项目工程代码。
- 若项目工程某功能分支已有多人在开发,建议管理人员统一引入submodulle公共库后,各开发人员在clone已有submodule公共库的代码后再进行开发。(引入submodule公共库所花费时间不长)
- 建议submodule公共库和项目工程各分支名称尽量保持一致,且对应关系一致。
- 以下内容涉及到submodule公共库均简称公共库。
二、 已有项目库添加公共库(以dev分支为例)
- 添加公共库(温馨提示:修改之前请先核对内容,确保不影响之前的内容及引用)
git submodule add -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/submodule.git src/components/lib
- git status查看改动
添加了.gitmodules文件和子模块目录文件。
- 将子模块切换到dev分支
git submodule foreach git checkout dev
- 初始化并拉取远端公共库dev分支代码
git submodule update --init
- 查看本地是否已经成功获取公共代码
cd src/components/lib
ls
- 项目工程有使用到公共库代码的地方,修改项目工程公共代码的引用路径,并删除源文件。
- 启动项目工程,测试是否可以正常运行。
npm run dev
- 提交改动
git add .
git commit -m ‘add submodule’
git push origin dev:dev
三、克隆已有公共库的前端工程(以dev分支为例)
1、克隆工程
git clone -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/project.git
- 初始化并下载子模块
cd project
git submodule foreach git checkout dev
git submodule update --init --recursive
- 上述命令也可以合并为以下命令
git clone --recurse-submodules git clone -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/project.git
- 启动工程验证
npm run dev
四、项目库上获取公共库的修改(以dev分支为例)
- 子模块切换到正确分支
git submodule foreach git checkout dev
- 拉取公共库代码
git submodule update --remote --merge
- 查看状态并提交更改
git status
git add .
git commit -m ‘change submodule commit id’
git push origin dev:dev
五、删除公共库
- 删除项目库根目录/.gitmodules中对应的条目
- 删除项目库根目录/.git/config中有关submodule对应的条目
- 删除项目库根目录/.git/modules目录下对应的submodule文件夹目录
- 执行git rm --cached [modulename]命令,如本例中的git rm --cache src/components/lib
- 删除submodule文件夹内容
六、使用公共库的技巧
- 设置别名
git config alias.sdiff ‘!’”git diff && git submodule foreach ‘git diff’”
git config alias.spush ‘push --recurse-submodules=on-demand’
git config alias.supdate ‘submodule update --remote --merge’
- 常见问题
A. 问题:从有子模块的分支切换到没有子模块的分支时,会带过去一个未跟踪的子模块目录
解决方式:删除该目录即可。
B. 问题:从无子模块的分支切换回有子模块的分支,子模块目录内容没有了。
解决方式:git submodule update --init
重新填充。
C. 若更改过.gitmodules文件中的URL内容,项目库执行git submodule update或git pull --recurese-submodules会失败。
解决方式: git submodule sync --recursive //将新的URL复制到本地配置中
git submodule update --init --recursive //从新URL更新子模块
七、官方文档请戳 git submodule子模块
小伙伴们,git submodule还在一直使用中,如有建议或疑问下方留言!希望能为小白的你提供一点思路。加油!!!
来源:oschina
链接:https://my.oschina.net/yxmBetter/blog/4345648