Skip to content
Go back

如何使用 Git 子模块

Published:  at  10:48 PM

Git Submodule 允许你将一个 Git 仓库(RepoA)作为另一个仓库(RepoB)的一个子目录,这样就是 RepoA 是 RepoB 的子模块,子模块本质上是一个指向仓库 RepoA 某个特定提交的指针引用

仓库 RepoA 和 RepoB 仍然是独立的项目,有独立的开发历史和权限管理。仓库 RepoB 只记录它引用了仓库 RepoA 的哪个提交,而不是代码本身。

假设你已经有了 RepoA 和 RepoB,现在想将 RepoA 添加为 RepoB 的子模块,在 RepoB 目录中打开终端执行:

git submodule add <URL_TO_REPO_A> libs/repo_a

请注意,在执行这条命令时,仓库 RepoB 的目录中不能存在 libs/repo_a 目录,你需要指定一个不存在的目录。

Git 会创建两个变化:

你可以在仓库 RepoB 中添加并提交这两个变化:

git add .gitmodules libs/repo_a
git commit -m "feat: add repo_a as a submodule"

其他人使用仓库 RepoB 时:

# clone RepoB
git clone <URL_TO_REPO_B>
cd repo_b

# 更新子模块
git submodule update --init --recursive

如果仓库 RepoA 有了新的提交,你需要先在 libs/repo_a目录下拉取更新,然后在仓库 RepoB 中提交这个新的引用。

# 进入子模块目录
cd libs/repo_a
git checkout main  # 或 master, 或其他你需要的分支
git pull origin main

# 返回主项目根目录
cd ../..
git add libs/repo_a
git commit -m "chore: update submodule to latest commit"

其他人想要获取最新的仓库提交时:

# 在 RepoB 中
git pull

# 更新子模块
git submodule update

Share this post on:

Previous Post
WSL2网络代理设置
Next Post
FFmpeg 命令备忘