使用git submodule维护已有项目的工具文件夹

需求:多个项目使用一个相同的工具集,这个工具集时常增加新功能,要方便各个项目同步新功能
环境:多个项目由gitlab托管,macOS 11.4

需要处理的工具集文件夹结构如下:

./src/client/tools
├── Tool.exe 工具程序
├── config.json 公用配置
├── publish.bat 发布脚本
├── resources 源码文件夹
├── temp 个人配置及运行时临时文件夹

1.gitlab上新建toolset空白项目 地址为:http://192.168.0.xx/group/toolset.git
2.将某个旧项目中的 工具集文件夹(我这里名为:tools) 复制到 旧项目根目录之外,按照gitllab 【Push an existing folder】步骤初始化项目:

cd 	新建的目录\tools
git init
git remote add origin http://192.168.0.xx/group/toolset.git
git add .
git commit -m "Initial commit"
git push -u origin master

3.旧项目中的根目录中添加子模块,由于submodule的操作对于非程序同学来说有些复杂,所以我决定新建一个文件夹用来维护子模块相关,而工具程序保持在原路径,每个项目同步子模块后再各自重新导出工具程序, 改造后结构如下:

./src/client/tools
├── Tool.exe 工具程序
├── config.json 公用配置
├── temp 个人配置及运行时临时文件夹

./src/client/toolset
├── publish.bat 发布脚本
├── resources 源码文件夹

先把tools/目录下不需要的文件从版本库中删除,这部分是git的基础操作就不再赘述,然后给旧项目添加submodule(这些操作最好拉出一个分支来处理):

git submodule add http://192.168.0.xx/group/toolset.git ./src/client/toolset
git commit -m "submodule"

然后推送即可,如果新建了分支进行操作,就先合并再推送。

4.对于其他依赖工具的项目,重复步骤3即可。

5.后续开发,我们项目中的工具集是跟项目高度相关的,所以希望在父项目中直接开发。新分支的submodule 目录 是没有文件的 需要先执行 git submodule update --init 将代码拉到本地,cd ./src/client/toolset 进入到submodule根目录, 注意这里是一个指向某个commit 的引用,使用git status 会看到这样的状态:

HEAD detached at 411bbca 或者 Not currently on any branch

需要检出一个分支,在分支进行代码修改,我直接就使用默认的master分支。开发步骤:

进入到 submodule 目录
git fetchgit checkout ,切换到最新版本的分支
修改代码、测试
git commitgit push, 子模块的修改就完成了
执行脚本发布工具程序, 发布 Tool.exe
再进入到原项目的目录,此时用 git status 应该可以看到src/client/toolset文件夹、Tool.exe 有变更,
提交变更

对于其他引用该子模块的项目,也按照上边的步骤,略过代码修改、commit的步骤即可。

PS:我是在原项目,新建分支上进行改造的,分支名:tool-feature; 当我在其他机器上使用githubDestop 工具checkout 分支 tool-feature时会报错:

fatal: not a git repository: …/…/…/.git/modules/src/client/toolset
fatal: could not reset submodule index

需要删除 .gitmodules、src/client/toolset,然后使用命令行切换:git checkout tool-feature;建议不要使用工具直接使用命令行:git checkout -b tool-feature origin/tool-feature

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值