认识 git submodule
很明显,我把我的hexo blog托管在了自己的github博客上,hexo只需要把本地生成的静态文件部署在你的服务器上,具体请看我的博客仓库地址,就是以下目录中的public文件夹,该文件夹通过hexo g生成和更新,博客所需要的静态文件都放在里面。静态文件部署请看前一篇文章。
1 | blog |
此之前,我曾经试图把整个blog文件夹里的内容都push到远程仓库中,但出现了一个问题,我挑选clone下来的主题目录themes/maupassant里的东西无法提交,然后我对比了一下能正常提交的默认主题landscape,发现二者明显的一个区别是,landscape少了.git文件夹,它不是一个仓库,初步断定,仓库中再包含仓库,子仓库是无法正常提交的,于是乎,百度之,谷歌之,了解了子仓库就是git submodule。
当然,像hexo这样提供了静态文件部署功能的命令行,不需要考虑这个问题。而如果某个项目确实是需要整个工程进行提交,怎么解决这个问题呢?
#方式一:
编辑父级git仓库的.gitignore(看谁不顺眼就屏蔽谁),忽略submodule中的.git,如下:
1 | ##这是.gitignore文件 |
#方式二:
git submodule的常规方法,你在项目中clone子仓库时,不用git clone <仓库地址>,而是用git submodule add <仓库地址>。那么,这里衍生出一些问题,如何更新子仓库?如何clone带有子仓库的仓库?请看下面:
更新子仓库
1 | git submodule init |
克隆带有子仓库的仓库
1 | git clone --recursive <仓库地址> |