Git submodule 子模块

Git submodule 子模块

  • 主项目并不是复制了一份子模块的代码,而是记录子模块的某个 commit SHA 信息
  • 子模块不会自动跟着远端更新,如果要更新到新版本,需要主动操作

添加子模块

bash 复制代码
# 主项目 submodule-demo-app
cd submodule-demo-app
git submodule add https://github.com/louisgeek/submodule-demo-lib.git libs/submodule-demo-lib
git commit -m "Add submodule"

克隆主项目时一并初始化并拉取子模块(第一次拉项目方式1)

bash 复制代码
# 克隆 submodule-demo-app 主项目,并初始化、递归拉取子模块
# 子模块会检出到主项目当前 commit 所记录的特定 commit
git clone --recurse-submodules https://github.com/louisgeek/submodule-demo-app.git

之前已克隆了主项目,再初始化并拉取子模块(第一次拉项目方式2)

bash 复制代码
git clone https://github.com/louisgeek/submodule-demo-app.git

cd submodule-demo-app
# 将子模块检出到主项目当前 commit 所记录的子模块 commit
# --init:初始化尚未初始化的子模块
# --recursive:递归处理嵌套子模块
#
# 即使 .gitmodules 配置了 branch = main/develop,
# 此命令默认也不会追踪该分支的远端最新提交。
git submodule update --init --recursive

拉取主项目后,使子模块与主项目记录的版本对齐(日常拉代码)

bash 复制代码
# 拉取主项目
git pull
# 确保所有子模块(含嵌套子模块)都检出到主项目当前记录的 commit
git submodule update --init --recursive

如果已确认所有子模块都初始化过了,也可以通过一条命令实现

bash 复制代码
git pull --recurse-submodules

将子模块更新到其远端跟踪分支的最新提交

bash 复制代码
# 若 .gitmodules 配置 branch = develop,则跟踪 develop
# 若没有 branch 配置,则使用子模块远端 HEAD 所指向的默认分支(通常就是 origin/main)
git submodule update --remote --recursive
bash 复制代码
# 处理过 --remote 后,主项目中的子模块指针通常会发生变化
# 若要将该版本升级记录到主项目,需要提交一次主项目
git add path/to/submodule
git commit -m "update submodule"
git push
相关推荐
高调的涵涵2 天前
删了1.2GB,.git仍是1.2GB
git
程序员沉梦听雨2 天前
【Git】git-submodule子模块管理
git
全栈陈序员3 天前
Git】从入门到精通(八)—— git log:查看提交历史
大数据·git·elasticsearch
7177773 天前
Git自建用什么工具比较好:Gitea、Forgejo、GitLab CE与Gitee的选型对比
git·gitlab·gitea
lsc_blog4 天前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
全栈陈序员4 天前
【Git】从入门到精通(十一)—— git reset 三种模式详解
git·elasticsearch
全栈陈序员4 天前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
全栈陈序员4 天前
【Git】从入门到精通(五)—— git add:将文件加入暂存区
大数据·git·elasticsearch
全栈陈序员5 天前
【Git】从入门到精通(七)—— git status:查看仓库状态
大数据·git·elasticsearch
莫晓燚5 天前
Ansible 13 个常用模块---企业实战
git·github