参考文章:
目的:
组件化实现了项目的多模块管理,但同时对查看整体组件模块非常不便,需要手动的一个个模块 checkout 着实麻烦,通过 git 中建立子git 的方法,能对项目整体结构有一个清晰了解,方便维护。
Git submodule 仓库搭建步骤:
1、搭建项目 组件模块的 git 仓库;
2、新建 远程 git 仓库 作为父仓库,并将父仓库 clone 到本地;
3、打开终端,cd 进 父仓库的目录,输入如下:
git submodule add 组件的git仓库地址
根据提示,输入对应 git 平台的账户密码,即完成 本地 子仓库的添加;
注意,在添加子仓库前,请先确保子仓库不为空,否则会添加失败。
4、将修改后的父仓库 push 到远程。
引用子模块:
方式1、克隆 父仓库到本地后,开发某个组件,你仍然可以通过另外直接 克隆 该组件本地开发的操作进行修改再更新到远程。
方式2、由于已经克隆了 父仓库,本来已经包含有所有的 子仓库,这是打开 sourceTree,添加已存在的本地仓库,如图:
打开子仓库的目录,就能将子仓库添加进 sourceTree 管理,之后像方式1一样更新修改即可。
方式3、使用 sourceTree 打开 父仓库,点击打开 底下 修改的子模块,如图:
之后就像方式1一样进行提交更新即可。
父仓库的更新:
1、如果使用的是上面说的第一种方式引用子模块,在提交更新后,使用 sourceTree 打开 父仓库,点击打开 底下 修改的子模块,如图:
拉取刚提交的 子模块代码,之后提交 父仓库的子模块变化后的修改,完成更新。
2、如果是上面说的第2、3种方式引用子模块,在提交子模块仓库修改后,再提交 父仓库 子模块变化后的修改,完成更新。
注意,使用方法2 提交 父仓库更新时,可能会存在冲突,这是由于提交的子模块仓库的版本落后于远程子模块仓库版本导致的,这时先不用管父仓库,先更新所有的子模块仓库,你可以通过 sourceTree 手动操作,也可通过命令:
git submodule foreach git pull origin master
更新完子仓库后,你会发现冲突也解决了,这是直接提交 父仓库,更新远程即可。
注意:
这种 git 子仓库管理方式,只是将 子仓库的某一版本包含进来,所以子仓库的版本改变了,需要在父仓库中抓取对应子仓库的版本更新,一旦抓取到子仓库的新版本,就等于是父仓库作了修改,所以需要提交父仓库的修改,更新父仓库版本。