子模块submodule
submodule项目和父项目本质上是两个独立的git仓库,只是父项目存储了它依赖的submodule项目的版本号信息。
-
添加子模块
git submodule add <url> <path>
其中,url为子模块的路径,path为该子模块存储的目录路径。
-
克隆含有子模块的项目
当一个git项目包含子模块时,直接克隆下来的子模块目录里面是空的。
要克隆子模块需要执行下面的步骤:
1、初始化本地子模块配置文件git submodule init
2、更新项目,抓取子模块内容
git submodule update
- 需要注意的地方
确保每次提交的时候,子模块使用的是对应的版本
子树subtree
-
添加子树
git subtree add --prefix=<subtree name> --squash <subtree name> <branch name>
通过subtree添加子模块,–squash可省略,其功能是只有最新的提交记录被引入,去掉后则是引入所有历史提交记录
-
子树更新
git subtree pull -P <subtree name> <subtree name> <branch name>
-
子树提交
git subtree push --prefix=<subtree name> <subtree name> <branch name>
不同之处
git submodule类似于引用,父仓库引用了子仓库,两者的更新是独立的;
而git subtree类似于拷贝,子树的修改可以在父仓库的未暂存区看到。