Git subtree

原始的visoc(父项目)项目结构是下图这样的:

Git subtree_第1张图片

子项目router是这样的:

Git subtree_第2张图片

在父仓库中新增子仓库

我们执行以下命令把router添加到visoc中:

git subtree add --prefix router [email protected]:Dovar66/Router.git master --squash

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

然后执行git push把修改推送到远端visoc仓库,现在本地仓库与远端仓库的目录结构为:

Git subtree_第3张图片

当我们在visoc中修改router文件夹下的内容后执行git push,将会把修改push到visoc上,但不会推送到router仓库。

从源仓库拉取更新

如果router仓库更新了,visoc里的router如何拉取更新?使用git subtree pull如下

git subtree pull --prefix router [email protected]:Dovar66/Router.git master --squash

推送修改到源仓库

如果在visoc仓库里修改了router,然后想把这个修改推送到源router仓库呢?使用git subtree push如下:

git subtree push --prefix router [email protected]:Dovar66/Router.git master

简化git subtree命令

这里我们把子仓库的地址作为一个remote,方便记忆:

git remote add -f router [email protected]:Dovar66/Router.git

然后可以这样来使用git subtree命令:

git subtree add --prefix router router master --squash

git subtree pull --prefix router router master --squash

git subtree push --prefix=router router master

引用子项目的组件

visoc是个完整的android项目,router也是一个完整的android项目,那么visoc怎么引用到router下的module呢?如下图

Git subtree_第4张图片

你可能感兴趣的:(Git)