添加子模块
|
|
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