综述
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
Comments | NOTHING