使用下 Subtree,顺带对比下 Submodule
方案
多个项目间同步子项目
- Git Submodule:这是 Git 官方以前的推荐方案
- Git Subtree:从 Git 1.5.2 开始,Git 新增并推荐使用这个功能来管理子项目
- npm:node package manager,实际上不仅仅是 node 的包管理工具
npm 侧重于包的依赖管理,但没办法双向同步,更适用于子项目比较稳定的情形。Git Submodule 和 Git Subtree 都是官方支持的功能,但不具有依赖管理的功能
Submodule
submodules 类似于引用
- 通过
.gitmodules
记录引用关系 - 主仓库通过一个 submodule 的 commitID 进行关联
- 常规命令
- git submodule add
- git submodule init
- git submodule update
- 工具类命令
- git submodule foreach git checkout dev
Subtree
subtree 类似于拷贝
- 不会生成相关的配置文件
- 子模块相当于主仓库里的普通目录,如果修改了字模块的文件,在主仓库直接使用 git push 提交,这时候会直接提交到父仓库
- 缺点:需要学习新的指令,子仓库的更新与推送指令相对复杂
- 常规命令
- git subtree add --prefix=module_location_dir remove_git_url commitId:Git 会遍历所有的 commit,从中找出针对共享目录的更改,然后把这些更改记录提交到共享项目的 Git 服务器上
- git subtree pull
- git subtree push
- git subtree merge
- git subtree split 基于已有代码拆分子仓库