Git 之 submodule

背景

记录工作中git子仓库的使用

什么是子仓库

git提供的一种机制,用于在一个仓库中嵌套另一个独立的仓库,子仓库管理的代码作为模块被项目所使用,同时子仓库独立维护版本

常见命令

bash 复制代码
# 首次集成子仓库
git submodule add <仓库url> <本地路径>

# 拉取子仓库最新代码
git submodule update --remote

# 初始化子仓库配置
git submodule init

日常使用

主仓库维护者首次添加子仓库

首次集成子模块只需使用 git submodule add指令,动作包含:

  • 主仓库初始化子模块配置,可以查看 .git/config 文件更改
  • 生成.gitmodules文件,内容包含子模块仓库地址及目录
  • 克隆子仓库到子目录
bash 复制代码
# 添加子模块
git submodule add <仓库url> <本地路径>

# 提交
git add .
git commit -m '添加子模块'

# 推送主仓库变更
git push

协同者克隆主仓库

协同开发者拉取主仓库需要对子仓库初始化,同时还需拉取子仓库代码

bash 复制代码
# 初始化子仓库
git submodule init

# 拉取子仓库
# 方式1:从来自当前主仓库记录的子仓库提交记录拉取,意味着可能拉取的不是最新的子仓库代码
git submodule update

# 方式2:拉取最新的子仓库代码,忽略来自主仓库的记录
git submodule update --remote

删除子仓库

从git中删除子模块(submodules),包含下面三个动作

  • 清理git文件追踪(删除git cache)
  • 清理git中相关子模块配置
  • 物理删除子模块文件
bash 复制代码
# 1.git索引清理子模块
git rm --cached path

# 2.清理git中相关子模块配置
 a .gitmodules
    ## 方式1
    git config -f .gitmodules --remove-section submodule.path
    ## 方式2: 
    手动删除.gitmodules中相关模块
    
 b. .git/config
    ## 方式1
    git config -f .git/config --remove-section submodule.path
    ## 方式2
    手动删除.git/config相关子模块配置
    
# 3.清除子模块文件夹
 # a. 清除根目录下子模块文件夹
   rm -rf path
   
 # b.清除.git/modules子模块缓存
   rm -rf .git/modules/path
   
# 4. 提交更改
  git commit -m "Remove submodule path/to/submodule"

注意事项

  • 可以添加多个子模块
相关推荐
vibecoding日记2 天前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
程序员小崔日记2 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
Bigger3 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
红豆子不相思4 天前
Tomcat 环境搭建与集群实战
服务器·git·tomcat
杰哥技术分享4 天前
Git 仓库迁移技术文档:从 CODING.net 迁移至腾讯云 CNB
git
梅孔立4 天前
Ansible 100 台服务器一键管控实战 进阶版
服务器·git·ansible
qq_426003965 天前
git切换当前分支到远程分支
git
ON10N5 天前
100% 纯 Vibe Coding,我是怎么用 AI 撸出一个 VS Code 插件的
git·ai编程·visual studio code