Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Git 子模块(submodule)允许将一个 Git 仓库作为另一个仓库的子目录,同时保持独立的版本控制。以下是详细用法:

1. 添加子模块

1
2
3
git submodule add <仓库URL> [路径]
# 示例:将仓库添加到 libs/submodule 目录
git submodule add https://github.com/user/repo.git libs/submodule
  • 此操作会生成 .gitmodules 文件,记录子模块信息。
  • 提交主仓库的改动:git commit -m "Add submodule"

2. 克隆包含子模块的仓库

  • 一次性克隆主仓库和子模块

    1
    git clone --recurse-submodules <主仓库URL>
  • 已克隆主仓库后拉取子模块

    1
    2
    git submodule init   # 初始化本地配置
    git submodule update # 拉取子模块代码

3. 更新子模块

  • 更新到主仓库记录的提交

    1
    git submodule update
  • 拉取子模块远程最新变更(需配置分支):

    1. .gitmodules 中配置分支:
    1
    2
    3
    4
    [submodule "libs/submodule"]
    path = libs/submodule
    url = https://github.com/user/repo.git
    branch = main
    1. 拉取更新:
    1
    git submodule update --remote

4. 修改子模块

  1. 进入子模块目录:

    1
    cd libs/submodule
  2. 修改代码后提交并推送:

    1
    2
    3
    git add .
    git commit -m "Update submodule"
    git push origin main
  3. 返回主仓库,提交子模块的新状态:

    1
    2
    3
    cd ..
    git add libs/submodule
    git commit -m "Update submodule to latest commit"

5. 删除子模块

  1. 反初始化子模块:

    1
    git submodule deinit libs/submodule
  2. 删除 .gitmodules 和相关配置:

    1
    2
    git rm libs/submodule
    rm -rf .git/modules/libs/submodule # 删除 Git 内部缓存
  3. 提交更改:

    1
    git commit -m "Remove submodule"

6. 其他常用命令

  • 查看子模块状态

    1
    git submodule status
  • 批量操作所有子模块(如拉取更新):

    1
    git submodule foreach git pull

注意事项

  • 版本固定:主仓库记录子模块的特定提交哈希,而非分支跟踪。
  • 协作同步:更新主仓库后,需运行 git submodule update 同步子模块。
  • 嵌套子模块:使用 --recurse-submodules 递归初始化嵌套子模块。

通过合理使用子模块,可以有效管理项目依赖,同时保持代码库的独立性。遇到问题时,可通过 git submodule --help 查阅详细文档。

推荐阅读
git配置3 - 一个git仓库同时push到多个代码托管平台 git配置3 - 一个git仓库同时push到多个代码托管平台 博客建站7 - hexo博客独立服务器如何自动部署? 博客建站7 - hexo博客独立服务器如何自动部署? git配置1-不同的项目使用不同用户名或邮箱 git配置1-不同的项目使用不同用户名或邮箱

评论