关于git subtree 的用法总结

背景:
关于子仓库或者说是仓库共用,git官方推荐的工具是git subtree。对于公司而言,可能就正在开发的项目使用git 建立一个公共的大仓库(大仓库的地址称为PR),大仓库包括所有IP 的文件夹, 作为IP 开发者,我们可能平时会开发design 新版本也希望用git 管理,但是不希望中间的不稳定版本被大仓库中的其他人看到,这个时候可以选择使用git subtree 的方式在大仓库中建立IP 子仓库(子仓库的地址称为SP)。

创建subtree 管理子仓库

Step1 cd PR(已经可能下来的大仓库的路径)
Step2
git subtree add – prefix=xxx(大仓库中IP 的路径,比如: design/subsys/pcie )
xxx1(远程IP仓库的路径,可以使用git remote -v 获取;比如:/prj/Repo/pcie_ss_repo) de(子仓库的branch name 必须和大仓库的branch name 保持一致,否则会出现未知ERROR)
Step3 git ci -m “xxx”(提交commit ID )
Step4 git pull (拉取大仓库的更新)
Step5 git push (push 新改动到大仓库)

Note : git subtree add 时,子branch name 必须和 主仓库 branch name 一致;

实操需求1. 只往子仓库push 改动, 不往大仓库push 改动
Step1 cd PR
Step2 git add xxx(子仓库的改动)
Step3 git ci -m “” (子仓库的commit ID)
Step4 git subtree pull – prefix=design/subsys/pcie
/prj/Repo/pcie_ss_repo de
Step5 git subtree push – prefix=design/subsys/ddr_ss
/prj/Repo/pcie_ss_repo de

需求2 往大仓库push 改动
再需求1 的基础上继续执行下面的步骤;
Step1 cd PR
Step2 git pull
Step3 git push

需求3 在大仓库只拉取子仓库的改动
Step1 cd PR
Step2 git subtree pull – prefix=design/subsys/pcie
/prj/Repo/pcie_ss_repo de

可以将“git subtree pull(push) – prefix=design/subsys/pcie
/prj/Repo/pcie_ss_repo de” 作为快捷命令

在~/.cshrc 加入下面的code:
alias gspu ‘git subtree pull – prefix=design/subsys/pcie
/prj/Repo/pcie_ss_repo de’
alias gsph ‘git subtree push – prefix=design/subsys/pcie
/prj/Repo/pcie_ss_repo de’

1 个赞

subtree可以有效解决大仓库git命令变慢,pull一堆自己用不到也不关心的文件,而且对其他人来说完全无感,不会影响他们使用,实用!

1 个赞