Git Submodule 理解

本文介绍了Git Submodule的功能及使用方法,包括如何拉取包含submodule的仓库、如何更新子仓库、如何将子仓库修改同步到父仓库,以及在主仓库中直接更新子仓库的步骤,帮助开发者理解和管理子仓库与父仓库的同步更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用。通用的部分作为独立git库,用于多个父项目的库,git submodule功能就能解决此问题。这里介绍如何理解子仓库和父仓库的同步更新使用。

如何拉取包含submodule的git父仓库

如果一个git仓库包含一个或多个submodule(子仓库),通过以下方式拉取代码。
方式一,clone的时候一起拉取submodule

git clone -b branch_name --recurse-submodules git@xxx/project.git
说明:
1. branch_name:是需要拉取父仓库的分支名称
2. git@xxx/project.git:是需要拉取父仓库的源地址
3. 加上--recurse-submodules这个参数就会clone的时候同时拉取所有子仓库

方式二,先clone父仓库,后再拉取submodule

拉取父仓库代码:
git clone -b branch_name git@xxx/project.git
拉取子仓库代码:
git submodule update --init --recursive

如何更新包含submodule的仓库

要更新子仓库,需要先pull父仓库

更新父仓库:
git pull
再更新子仓库submodule
git submodule update --init --recursive

如何把子仓库修改同步更新到父仓库

开发中,经常会遇到,你引用了别人的项目(module)作为自己的子仓库,当别人的项目仓库(module)有更新的时候是不会关联到你的父仓库的。
示例
那么如何在父仓库关联更新呢?
首先查看module仓库的(修改点B)的commit id
然后在主仓库project中,进入子仓库目录,cd project/module,执行命令

git checkout (修改点B)的commit id

这时候git status会看到子仓库目录module有更改的提示,然后在主仓库提交这个更改。

git add module
git commit -m "update submodule"

如何在主库开发过程中直接更新子仓库

开发中会遇到在开发主仓库project同时更新子仓库的内容,那么我们就没必要单独去clone子仓库module的代码,直接在主仓库里一并提交就可以,且还让主仓库关联了子仓库的提交更新。
需要更新子仓库时,进入子仓库目录,cd project/module,执行对应的git提交操作

git add 你的修改
git commit -m "update in module"

注意:子模块里面的branch分支一般会处于游离状态,要git checkout到对应分支。
另外子模块也要单独git push, 推送提交到远端服务器。

然后再在project再提交一次,这个提交的意思是让主库关联到子库的最新提交

git add module
git comit -m "update submodule"

然后git push,推送提交到远端服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值