Git subtree 教程
关于子仓库或者说是仓库共用,git官方推荐的工具是git subtree。 我自己也用了一段时间的git subtree,感觉比git submodule好用,但是也有一缺点,在可接受的范围内。所以对于仓库共用,在git subtree 与 git submodule之中选择的话,我推荐git subtree。
Git subtree是什么?为什么使用Git subtree
git subtree 可以实现一个仓库作为其他仓库的子仓库。
使用git subtree 有以下几个原因:
- 旧版本的git也支持(最老版本可以到 v1.5.2).
- git subtree与git submodule不同,它不增加任何像
.gitmodule
这样的新的元数据文件. - git subtree对于项目中的其他成员透明,意味着可以不知道git subtree的存在. 当然,git subtree也有它的缺点,但是这些缺点还在可以接受的范围内:
- 必须学习新的指令(如:git subtree).
- 子仓库的更新与推送指令相对复杂。
Git subtree 的使用
git subtree的主要命令有:
git subtree add --prefix=<prefix> <commit>
git subtree add --prefix=<prefix> <repository> <ref>
git subtree pull --prefix=<prefix> <repository> <ref>
git subtree push --prefix=<prefix> <repository> <ref>
git subtree merge --prefix=<prefix> <commit>
git subtree split --prefix=<prefix> [OPTIONS] [<commit>]
准备
我们先在Github 中创建vue-login,然后按照 GitHub 上的提示将项目克隆到本地
git clone https://github.com/surile/vue-login.git
vue-login的路径为https://github.com/surile/vue-login.git,仓库里的文件有:
vue-login
|
|-- build
|-- pulish
|-- src
|-- webpack.common.js
|-- webpack.prod.js
|-- webpack.dev.js
\-- README.md
以下操作均位于根目录中。 我们执行以下命令把master 分支中的 build 文件推送到远程仓库gh-pages分支中:
yarn build || npm run build
git checkout -b gh-pages
git add -f build
git commit -m 'created gh-pages'
git subtree push --prefix build origin gh-pages
这步做完之后就可以在 GitHub 上看见 gh-pages 分支了。GitHub 会自动部署 gh-pages 里的静态文件。 点开 Settings,将会看到以下内容。勾出绿色部分则是你的URL
当我们修改项目完成之后,肯定是要从前 build 的。这时使用以下命令,则就没用了。
yarn build || npm run build
git add -f build
git commit -m '重新 build'
git subtree push --prefix build origin gh-pages
会出现以下错误。
出现这种错误,根据提示我们可以看出来,是要让我们强行将 build 推送到远程gh-pages 分支上,则可以用以下命令
git push origin `git subtree split --prefix build master`:gh-pages --force
运行命令,则可以强制将 build 文件夹推送到远程 gh-pages 分支上了。