Vue工程使用git添加submodule公共库的项目实践

我只是一个虾纸丫 提交于 2020-08-16 17:52:11

Vue工程使用git添加submodule公共库的项目实践

  • Vue的使用,一直在路上!

  • Git的使用,一直在路上!

  • Git submodule的使用,开始并将一直使用!(旨在解决多工程使用公共库代码的方式,且不必每个客户端都包含该库,亦可保持公共库代码提交的独立性。)

一、 说明

  1. 假设submodule公共库的gitlab地址:ssh://git@y:8080/submodule.git,且submodule公共库已有公共代码内容,此公共库和项目工程代码提交保持一致。
  2. 添加submodule公共库均为全量添加,即增加公共库后submodule的内容会全部存在而非部分存在。
  3. 若在已有工程引入公共库,且项目工程已包含公共库内容,建议在使用公共库前将项目工程内容和公共库内容进行对比,以免更改后引入的无效或丢失项目工程内容。且建议:如非必要,尽量修改项目工程代码。
  4. 若项目工程某功能分支已有多人在开发,建议管理人员统一引入submodulle公共库后,各开发人员在clone已有submodule公共库的代码后再进行开发。(引入submodule公共库所花费时间不长)
  5. 建议submodule公共库和项目工程各分支名称尽量保持一致,且对应关系一致。
  6. 以下内容涉及到submodule公共库均简称公共库。

二、 已有项目库添加公共库(以dev分支为例)

  1. 添加公共库(温馨提示:修改之前请先核对内容,确保不影响之前的内容及引用)

git submodule add -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/submodule.git src/components/lib

  1. git status查看改动

添加了.gitmodules文件和子模块目录文件。

  1. 将子模块切换到dev分支

git submodule foreach git checkout dev

  1. 初始化并拉取远端公共库dev分支代码

git submodule update --init

  1. 查看本地是否已经成功获取公共代码

cd src/components/lib

ls

  1. 项目工程有使用到公共库代码的地方,修改项目工程公共代码的引用路径,并删除源文件。
  2. 启动项目工程,测试是否可以正常运行。

npm run dev

  1. 提交改动

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

  1. 初始化并下载子模块

cd project

git submodule foreach git checkout dev

git submodule update --init --recursive

  1. 上述命令也可以合并为以下命令

git clone --recurse-submodules git clone -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/project.git

  1. 启动工程验证

npm run dev

四、项目库上获取公共库的修改(以dev分支为例)

  1. 子模块切换到正确分支

git submodule foreach git checkout dev

  1. 拉取公共库代码

git submodule update --remote --merge

  1. 查看状态并提交更改

git status

git add .

git commit -m ‘change submodule commit id’

git push origin dev:dev

五、删除公共库

  1. 删除项目库根目录/.gitmodules中对应的条目
  2. 删除项目库根目录/.git/config中有关submodule对应的条目
  3. 删除项目库根目录/.git/modules目录下对应的submodule文件夹目录
  4. 执行git rm --cached [modulename]命令,如本例中的git rm --cache src/components/lib
  5. 删除submodule文件夹内容

六、使用公共库的技巧

  1. 设置别名

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’

  1. 常见问题

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还在一直使用中,如有建议或疑问下方留言!希望能为小白的你提供一点思路。加油!!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!