git submodule子模块的使用

用submodule解决公共模块代码在多个项目中共用的问题

PHP项目中,有些公共模块代码,在多个项目中共用 如果每个项目中维护同样的代码块,在更新的时候就很不方便,公共模块更新的时候,需要对每个项目都做一次更新;

当然 PHP中除了用submodule的方式解决公共模块代码共用,还可以通过 composer 的方式实现; 这里只记录 submodule 的方式,以及 submodule 的使用

假设项目ProjectA中的一个目录Lib中的代码是在多个项目中通知的

  • 首先创建一个 git 仓库,放 Lib 目录中的代码

  • 在ProjectA中删除 Lib 目录,然后在 ProjectA 的根目录创建 .gitmodules 文件

文件内容

[submodule "Lib"]
    path = Lib
    url = https://github.com/wqd1688/project_lib.git
    branch = main

也可以通过命令创建

git submodule add 仓库地址 目录名称

git submodule add https://github.com/wqd1688/project_lib.git Lib

则会自动创建上面的文件并写入上面的内容; 注意: 自动写入的内容没有 branch 字段, git 默认的 branch 是 master, github 现在新建的项目默认主分支已经变成了 main, 所以需要手动指定一下 branch = main

添加好 .gitsubmodules 文件后,执行下面的代码,拉取子模块的代码到本地

git submodule update --remote

本地查看 git 状态时会发现 Lib 目录有更新,直接把 Lib 目录的更新添加,提交就可以, 但是尽量不要直接在 ProjectA中去修改 Lib 中的文件;

其他人拉取 ProjectA 的代码后, Lib 目录可能是空的,需要执行一下

git submodule update

从 ProjectA 中拉取子模块的代码

如果执行

git submodule update --remote

从 子模块 仓库拉取最新代码