git subtree使用

git subtree是什么

git subtree 可以实现一个仓库作为其他仓库的子仓库。
subtree的核心思想与能做的就只有同步项目文件。

  • 假如有P1 、P2两个项目,两个项目存在共用的代码,将共用的代码独立为新的git仓库——share项目;
  • 当你对P1/P2项目操作git clone或者git pull的时候,你拉取到的是整个P1/P2项目,包括share在内,share对于父级的主项目来说相当于是个普通目录;
  • 当你在P1/P2项目修改了share里的内容后执行git push,修改的share文件将像其他普通文件那样push到P1。

*[注]:
git subtree 命令中,都会用到一个参数 --prefix=<prefix>,可以简写成 -P <prefix>
git subtree 命令中,--squash 参数含义是:把 subtree 的改动合并成一次commit,这样就不用拉取子项目完整的历史记录。

场景一:当前项目下,把其他已有项目添加为子树(通用场景)

  1. git subtree add 添加项目作为子树
    命令: git subtree add -P <子树名> <子仓库地址> <分支> --squash
    执行以上命令后,当前项目下就会新创建一个名为 <子树名> 的目录。
    *[注]: 可以提前执行git remote add <子仓库名> <子仓库地址>
    该命令,添加了子项目的远程仓库地址(建议使用,后续针对子项目的操作直接写子仓库名即可,不用再写子仓库地址);
    然后再执行git subtree add -P <子树名> <子仓库名> <分支> --squash
    达到同样的效果。
  2. git subtree pull 从子仓库拉取子树更新
    命令:git subtree pull -P <子树名> <子仓库名> <分支> --squash
  3. git subtree push 推送子树更新到子仓库
    命令:git subtree push -P <子树名> <子仓库名> <分支>
    *[注]:当前项目的pull和push不会更新子仓库,更新子仓库需要git subtree pull或者git subtree push

场景二:把项目里的某个目录,分割出去作为子树维护

场景假设:现在在开发 Shop 项目有一段时间了,发现里面的 order 模块非常通用,着手使用 git subtree 把 order 作为一个子项目单独维护。
命令过程:

git remote add order-repo https://github.com/xxx/order.git  //1
git subtree push -P order order-repo master  //2

流程说明:
1,添加 order 子项目的远程仓库地址
2,order 模块作为 order 子树 push 到远程仓库

场景三:在现有项目里,新建了一个子模块(子目录),准备当作子树维护

场景假设:现在在开发 Shop 项目,刚新建了个 order 模块(还未提交到git),准备把这个 order 模块当作一个子项目维护。
命令过程:

cd Shop/order                                               //1
git init                                                    //1
git add .                                                   //1
git commit -m "add order ..."                                //1
git remote add order-repo https://github.com/xxx/order.git       //1
git push -u order-repo master

cd ../                                                      //2
rm -rf order                                                //2

git remote add order-repo https://github.com/xxx/order.git       //3
git subtree add -P order order-repo master --squash              //3

流程说明:
1, 进入 order 模块创建仓库、提交、添加远程仓库地址、push
2, 删除 order 模块
3, 添加 order 子项目远程仓库地址,git subtree add 添加 order 子项目作为子树

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值