简述
查看laravel/framework
,就会发现其实laravel
主包是由多个子包构建。
每个子包又都可以独立使用,主包中相关子包的commit
必须一致,同时还需要同步更新方便。如何做到这一点的呢?
Subtree
subtree 是什么
git subtree
可以实现一个仓库作为其他仓库的子仓库。或者说,可以实现一个主仓库包含多个子仓库。
subtree 的使用
查看git subtree --help
,发现命令如下:
1 | git subtree add -P <prefix> <commit> |
测试
使用以下简写来代表仓库名称:
A
:主仓库B
:子仓库
- 首先新建一个A仓库,进入A的主目录,在A仓库中执行命令(假定所有子仓库目录都存在于
A/src
中)1
git subtree add -P src/B https://github.com/B.git master
此时subtree则在A
仓库中绑定了B
仓库
进入
A/src/B
1
touch test
在
A
根目录提交commit
1
2
3git add src/B/test
git commit -m "subtree test"
git push origin master
那是如何同步相关commit
到子仓库呢?subtree push
即可
1 | git subtree push -P src/B https://github.com/B.git master |
即此,已经完成A
,B
仓库相关commit
同步
优化
如果,A/src
中有很多子仓库,每次更新完成后,手动更新N个子仓库非常让人头疼,索性搞个Bash跑一遍
1 |
|
Composer replace
可以看到在laravel/composer.json
中有replace
属性
1 | "replace": { |
那么如果是PHP
情况下我们也可以,使用replace
来在主包中加载子包依赖,从而提升统一版本更新的便捷性。