Git 子模块submodule的使用

Git子模块(submodule)允许在一个项目中包含另一个独立的git仓库。使用时需注意,子模块提交push后,主模块需同步更新其记录的子模块hash值,否则可能导致冲突。本文详细介绍了如何添加子模块、更新子模块以及如何处理子模块代码修改的流程。


参考资料

Git submodule

git submodule用于:一个git仓库中,包含另一个git仓库,两个仓库的提交记录,需同时保持独立存在。
当主项目中引入第三方git仓库,作为子项目的submodule可以修改、更新代码。
坑点:
submodule commit push后,由于主module记录了子项目的hash值,需要同时push 主module sha值,否则更新主module后会产生冲突:无法更新、无法回滚、无法合并。参考Git submodule的坑

以下MainModule、SubModule分别表示主module git、子module git实际地址。
主项目:https://MainModule.git
子项目:https://SubModule.git

一、普通项目增加submodule

git  submodule add https://SubModule.git

二、带submodule的项目更新

先更新主项目,再初始化子项目,并更新

1. 首次拉取

git clone https://MainModule.git
git submodule init
git submodule update

或者一次更新所有内容: git clone https://MainModule.git MainModule --recursive, 递归克隆整个项目,子模块已经同时更新了,一步到位。

2. 后续MainModule更新:

在MainModule上pull代码后,若有更新执行 ,需要同时更新子项目。若不及时更新SubModule产生文章开头所述问题。

git pull 
git status    # 查看是否有子项目更新
git submodule update     # 坑点:主项目已更新过依赖的submodule版本号,自己未及时更新,后续可能会将自己的旧版本号提交上去覆盖

对于submodule中包含submodule,可以采用git submodule foreach git submodule update ,一次性更新submodule内容

3. 修改SubModule代码

1. 修改SubModule代码,提交入库

进入submodule/SubModuleDir目录下(SubModule目录名),在SubModuleDir库的master分支上修改提交合入后执行: git pull --rebase

# submodule修改提交
cd submodule/SubModuleDir
git add .
git commit 
git push
2. 回到MainModule库更新、提交入库

回到MainModule库,先更新代码,再将submodule依赖作为一个普通commit提交合入到MainModule库,
此时MainModule库上就关联了SubModule的最新修改节点,后续其他人按MainModule更新

# main module 提交更新后的submodule版本号
cd 主项目git根目录
git pull --rebase
git add .
git commit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值