subtrees简要使用指南

219 阅读1分钟

初始化

父项目: parent

子项目: child

添加子库的远程地址:

 git remote add subtree-origin git@github.com:xxx/git_subtree_child.git

建立依赖关系

 git subtree add --prefix=subtree subtree-origin master --squash

其中的--prefix=subtree可以写成:--p subtree 或 --prefix subtree

squash会将子项目中的多个commit合并为一个commit

更新子库

git subtree pull --prefix=subtree subtree-origin master --squash

--prefix可以简写为-F,路径可以为subtree或者a/b/c这样的路路径

分支可以为master或者其他分支,commitId也可以

最佳实践:要么全部操作都使用--squash指令,要么全部操作都不使用该参数。

修改子库

在父项目中的subtree目录中修改后,commit后,可将更改同步到子库git地址

git subtree push --prefix=subtree subtree-origin master

和submodule的异同

相同点:都可以用来管理子仓库

不同点:

  1. submodule是通过commit URL关联到子仓库,subtree更像是把文件copy过来了
  2. submodule更新需要在子仓库修改后,再回到主项目进行更新关联commit,subtree可以在主项目中直接修改,并把修改同步到远程子仓库