git submodule TL;DR

简单又基础的Git Submodules的TLDR。上次在用hugo的时候碰到了git submodules的部分,完全是碰到知识盲区了,在这边简单记录一下git submodules的几种使用场景和用法。

虽然现在有ChatGPT之后直接打几个字问一下就行了,但是还是用博客记录的方式更方便理解吧。

克隆带有 Git Submodules 的仓库

1
2
3
4
5
6
7
# 方法一,一步到位
git clone --recurse-submodules <主仓库URL>

# 方法二,常规方式,较繁琐
git clone <主仓库URL> <主仓库目录?>
cd <主仓库目录>
git submodule update --init --recursive

添加 Submodules 到当前仓库

1
git submodule add <子模块仓库URL> [路径]

更新现有的 Submodules

根据记录的子模块的 Commit ID 来更新子模块

  • 当子模块仓库有了更新
  • 当主项目引用的子模块的提交点改变
1
git submodule update --init --recursive

更新现有 Submodules 到最新提交

1
2
3
4
5
6
7
# 进入 Submodules 并拉取最新更改
cd path/to/my-submodule
git pull

# 在主项目的跟路径下,保存提交
git add path/to/my-submodule
git commit -m "chore: update submodule"

更新现有 Submodules 的仓库地址

1
2
3
4
5
6
7
8
9
10
11
12
# 编辑 .gitmodules 文件,修改 url 字段

# 将 .gitmodules 中的变更同步到 .git/config
git submodule sync

# 更新 Submodules
git submodule update --init --recursive

# 保存并提交
git add .gitmodules
git commit -m "chore: update submodule url"
git push

删除现有 Submodule

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 通过 git 删除 Submodule 目录
git rm -f <submodule_path>

# 编辑 `.gitmodules` 和 `.git/config` 文件
# 找到并删除与该 Submodule 相关的那一段配置,如下

# [submodule "submodule_name"]
# path = submodule_path
# url = https://github.com/username/repo.git

# 删除 Submodule 目录下的 `.git` 目录引用。
# 如果之前使用 `git rm`,此步骤应该已经自动完成。

# 提交更改
git add .
git commit -m "chore: remove submodule"

# 在 `.git/modules` 中删除 Submodule 相关数据
rm -rf .git/modules/<submodule_path>

不过确实很少碰见需要用到git submodule的应用场景…

作者

Jhuoer Yen

发布于

2024-12-11

更新于

2024-12-11

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×