很明显,我把我的hexo blog托管在了自己的github博客上,hexo只需要把本地生成的静态文件部署在你的服务器上,具体请看我的博客仓库地址,就是以下目录中的public文件夹,该文件夹通过hexo g生成和更新,博客所需要的静态文件都放在里面。静态文件部署请看前一篇文章。

1
2
3
4
5
6
7
8
9
blog
├── _config.yml
├── package.json
├── public
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

此之前,我曾经试图把整个blog文件夹里的内容都push到远程仓库中,但出现了一个问题,我挑选clone下来的主题目录themes/maupassant里的东西无法提交,然后我对比了一下能正常提交的默认主题landscape,发现二者明显的一个区别是,landscape少了.git文件夹,它不是一个仓库,初步断定,仓库中再包含仓库,子仓库是无法正常提交的,于是乎,百度之,谷歌之,了解了子仓库就是git submodule。

当然,像hexo这样提供了静态文件部署功能的命令行,不需要考虑这个问题。而如果某个项目确实是需要整个工程进行提交,怎么解决这个问题呢?

#方式一:
编辑父级git仓库的.gitignore(看谁不顺眼就屏蔽谁),忽略submodule中的.git,如下:

1
2
##这是.gitignore文件
/blog/themes/maupassant/.git/

#方式二:
git submodule的常规方法,你在项目中clone子仓库时,不用git clone <仓库地址>,而是用git submodule add <仓库地址>。那么,这里衍生出一些问题,如何更新子仓库?如何clone带有子仓库的仓库?请看下面:

更新子仓库

1
2
git submodule init
git submodule update --remote

克隆带有子仓库的仓库

1
git clone --recursive <仓库地址>

了解更多git submodule,请点击Git-子模块