/ Technical / 23浏览

Git子模块的使用

在使用git管理项目的时候,有时候可能依赖别的项目,通常情况下并不是将其项目文件直接拷贝过来,而是以子模块的形式引入,以实现同步的更新与更改。

常用命令以及解释

添加子模块

  • 添加带branch的子模块到具体文件夹路径,git需要2.13以上

    • git submodule add -b <branch_name> <repo_url> <path>

  • 修改子模块分支:

    • git config -f .gitmodules submodule.<path>.branch <new_branch>

    • git submodule update --remote <path>

删除子模块

  • git删除子模块首先需要取消关联,然后再删除本地仓库引用,最后提交

    • git submodule deinit -f <path>

    • git rm -f <path>

    • rm -rf .git/modules/<path>

    • git commit -m 'Remove submodule'

子模块clone

  • 首次克隆带有子模块的github项目时候,应该添加参数进行clone,否则只有父目录,没有子模块项目

    • git clone --recurse-submodules <repo_url>

  • 对于已经克隆了主仓库,但是子模块没有拉取,可以使用命令

    • git submodule update --init --rescursive

    • --init : 初始化子模块(首次拉取)

    • --recursive : 递归拉取子模块内的子模块(如果有嵌套子模块)

子模块更新

  • 拉取最新子模块更新(如果主仓库已更新子模块)

    • git submodule update --remote --merge

    • --remote : 拉取子模块远程仓库最新内容

    • --merge : 合并到当前子模块HEAD

    • --recursive : 对多层子模块生效

  • 子模块本质是指向特定commit的独立git仓库,所以默认不会跟随主仓库更新

    • 如果想每次git pull主仓库的时候也自动更新子模块,可以使用:

    • git config --global submodule.recurse true

查看子模块状态

  • 使用 git submodule status 查看当前子模块的commit和路径,如果拉取的不完整,会显示- 或者 + 符号

达达下雨不吃鱼
Nvidia驱动安装与升级详细说明
Linux优雅的使用后台启动脚本
服务器运维踩坑指南
Python全能依赖管理器pixi
零信任点对点组网——Netbird
Python极速环境依赖管理工具uv