subtree

发布于 2020-11-08  346 次阅读


综述

subtree 是 git v1.7.11 提供的用于替代 submodule 的新模块
相对 submodule , git subtree 有如下优点:

  • 管理和更新流程比较方便
  • 仓库 clone 下来不需要 init 和 update
  • 不会产生 .gitmodule 类似的文件
  • 删除不会像 submodule 一样困难
  • 避免团队协作的问题

详细内容

git subtree -h
usage: git subtree add   --prefix=<prefix> <commit>
   or: git subtree add   --prefix=<prefix> <repository> <ref>
   or: git subtree merge --prefix=<prefix> <commit>
   or: git subtree pull  --prefix=<prefix> <repository> <ref>
   or: git subtree push  --prefix=<prefix> <repository> <ref>
   or: git subtree split --prefix=<prefix> <commit...>

添加

git subtree add --prefix=dirurl --squash

squash 表示不拉取历史信息,只生成一条commit信息

添加完成后然后通过 git push 将修改推送到远端

从源库拉取更新

git subtree pull --prefix=dirurl --squash

推送修改到源库

git subtree push --prefix=dirurl $branch

拆分已有项目

从已有项目 M 中抽取 A

1 提交分离日志

cd dir_m
git subtree split -P <name-of-folder> -b <name-of-new-branch>

2 创建新的仓库

mkdir <new-repo>
cd <new-repo>
git init
git pull <path/to/dir_m> <name-of-new-branch>
git remote add orgrin <A项目的仓库>
git push orgrin -u master

3 清理数据

cd dir_m
git rm -rf dir_a
git commit -m "rm module"
git branch -D <name-of-new-branch>

4 添加 subtree

git subtree add --prefix=<rl_dir_a> <url_a> <branch> --squash
git push orgrin master

朝闻道,夕死可矣