添加子模块
|
|
url为子模块git路径 path为子模块存储的目录路径
如,将 hugo-theme-stack 项目作为子模块添加到本地项目的 themes 目录
|
|
子模块添加成功后,执行 git status 命令可以看到 .gitmodules 文件已被修改,并新增了一个子模块
执行 git diff --cached 命令可以查看修改内容
执行 git commit 命令可以将子模块添加到本地仓库
添加子模块时使用 -b 参数指定分支
|
|
若子模块已添加,可以在 .gitmodules 中设置分支,其中 public 是主模块中安装子模块的名称, stable 是对应要设置的分支名称。
|
|
执行后,会在 .gitmodules 中的子模块添加分支(branch = main),如下
|
|
使用子模块
直接克隆包含子模块的项目时,子模块目录下没有任何文件,需要在项目的根目录下执行如下命令,完成子模块的下载
|
|
或者
|
|
克隆项目的同时下载子模块
|
|
更新子模块
子模块的维护者更新子模块后,使用子模块的项目必须手动更新子模块才可以使用最新的子模块。
在项目中,进入子模块目录下,执行 git pull 更新,执行 git log 可以查看子模块的更新内容。
之后进入项目根目录,使用 git add 和 git commit 命令将子模块更新到项目中,然后使用 git push 命令将更新子模块的项目推送到远程仓库。
如果自己要修改子模块内容,需要先在子模块根路径下执行 git checkout <分支名> ,然后才可以对该子模块进行修改和提交,否则git push提交时出现Everything up-to-date。
将子模块修改提交后,如果希望将项目依赖的子模块更新到最新版本,需要在项目根路径下执行 git submodule update --remote,然后将项目提交到远程仓库。
删除子模块
使用 git submodule deinit <子模块名称> 和 git rm <子模块名称> 命令卸载一个子模块。
如果添加 –force 参数,则子模块工作区内即使有本地的修改,也会被移除。
例如,删除名为 test-submodule 子模块
|
|
如果完全删除子模块,还需要删除项目根路径下的 .gitmodules 文件和 .git/modules 目录下的子模块文件
问题
- 子模块更新分支
添加子模块
|
|
子模块更新后,在父模块中更新子模块到最新版本
|
|
更新失败,错误如下
|
|
发现父模块依赖的子模块分支为master,正确应该是main分支(子模块项目初始分支是master,后来我新增了main作为默认分支,删掉了master分支)
参考:https://blog.csdn.net/weboof/article/details/108517187
更新子模块的分支
|
|
再执行更新子模块
|
|
参考:
https://blog.csdn.net/guotianqing/article/details/82391665 https://blog.csdn.net/Lee_queenie/article/details/127386151