在一个git项目下引用另一个项目的时,我们可以使用 git subtree。使用 git subtree
时,主项目下包含子项目的所有代码。
使用 git subtree
主要关注以下几个功能
- 一个项目A下如何引入另一个项目B
- 如果 B 有更新,如何同步到 主项目 A 中
- 如果在项目A中修改了B的代码,如何将修改的代码同步到 B中
下面详细说明
- 假设我们有一个项目名字叫
proj
. 现在想再该项目中引入另一个 git 项目sub_proj
。操作步骤为
cd proj/
# 1. 先为远程子仓库配置一个别名,便于后续的 pull 与 push 操作,这里例子以 sub_proj 为别名
git remote add sub_proj git@github.com:xx/sub_proj.git
# 2. 其中 --prefix= 简写为 -P,配置 --squash 表示不拉取子仓库的历史提交记录
# -P 用来指定:拉下来的代码 放到哪个目录下
# 该指令只能在 proj/ (即:主项目根目录) 下执行。 该指令就开始拉取 sub_proj 的 main 分支了
git subtree add -P path/to/your/dir --squash sub_proj main
- 如果之后
sub_proj
有更新,咋整呢?
git subtree pull -P path/to/your/dir sub_proj main
- 如果我们在
proj
的开发过程中,修改了sub_proj
,sub_proj
的代码如何同步到git
上呢?
git add -u
git commit -m "some modification"
git push origin main # 这个是往 proj 上提交改动
git subtree push -P path/to/your/dir sub_proj main # 这个是往 sub_proj提交改动
参考资料
https://gb.yekai.net/concepts/subtree-vs-submodule
http://www.cocoachina.com/articles/6161
https://segmentfault.com/q/1010000000670427