简介
开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用。通用的部分作为独立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,推送提交到远端服务器