Git subtree 的使用
场景
目前,git 的使用已是必不可少,但在实际生产开发过程中,不可避免的会出现这种的情况:项目 P1 和 P2 共用了一个项目 S。
使用中,我们希望保持项目 S 的独立开发,但同时希望保证项目 P1 和 P2 能够获取其最新的代码,甚至在 P1 和 P2 内就可以修改并提交针对 S 的更新。
Git submodule VS subtree
submodule 是子项目的一个链接(link);
subtree 则是子项目的一个拷贝(copy)。
Git subtree 的使用
添加项目 S(下均使用 proj-s)的 remote 信息:
git remote add proj-s http://github.com/[path-to-proj-s]
拉取 proj-s 并指明路径
git subtree add --prefix=component/proj-s proj-s master
其中,--prefix
后面的路径为基于 P1 或 P2 项目内的相对路径,proj-s
为上一步中添加的 remote 名称,master
为拉取分支,也可以来取其他分支。
P1/P2 中拉取 proj-s 到本地
git subtree pull --prefix=component/proj-s proj-s master
P1/P2 中提交 proj-s 到远端
git subtree push --prefix=component/proj-s proj-s hotfix/new-proj-s
如果这里提交到的是非 master 分支,那么在前往 proj-s 项目完成分支合并后,自己和其它人就可以通过拉取 master 使用最新的代码了。