文章目录
参考资料
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

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

被折叠的 条评论
为什么被折叠?



