前言

hexo d上传部署到github的其实是hexo编译后的文件,是用来生成网页的,不包含源文件,也不包含主题配置文件。
也就是上传的是在本地目录里自动生成的.deploy_git里面。

其他文件 ,包括我们写在source 里面的文章,和配置文件,主题文件,都没有上传到github。

本篇文章就是为解决hexo备份无法包含主题配置文件的问题

备份博客

创建新的仓库

重新创建一个仓库来专门存放所有的配置文件
创建一个仓库,勾选README

获取.git文件夹

原始的博客文件夹只有.deploy_git,是没有.git文件夹的,于是我们先去桌面或者哪里随便一个地方,把刚刚的hexo分支给clone下来。然后剪切出里面的.git文件夹,复制到现在的博客文件夹中。

1
git clone https://github.com/dida303/hexo-backup.git


需要把主题文件中的.git文件删掉,因为git不能嵌套上传。

备份到远程仓库

通过如下命令将本地文件备份到远程仓库

1
2
3
git add .
git commit -m "backup"
git push

经常备份

1
2
3
4
git add .
git commit -m "backup"
git push
hexo cl;hexo g;hexo d;

恢复

克隆到本地

1
git clone https://github.com/dida303/hexo-backup.git(换成自己的)

在clone下来的那个文件夹里面执行

1
2
3
npm install hexo-cli
npm install
npm install hexo-deployer-git

后言

heme主题上传到GitHub时,只有主题名,主题文件夹下并没有主题对应文件(主题文件备份失败),打不开文件,表明主题中的.git文件忘了删除。

原因

这是因为用到了 git 的子模块(git submodule)功能(你在你的 git 项目里 clone 的别人的项目)。

在你的主项目的 git 库里,子模块只是一个 HEAD 指针,指向子模块的 commit。

这个功能的意义:

  • 在这里,如果你需要修改 next 主题(可能需要很多文档),又想保证能够随时更新最新版本,其实用子模块功能是很方便的

  • 只需要 clone 下来新建一个 branch,用来自己用,每次官方更新 pull 到另一个分支,merge 一下就行。

  • 相当于把一个大项目分成多个小项目,尽可能减少项目之间的关联,方便调试和修改。

如何解决

  1. 先把.git文件删除
  2. 移除没有上传的butterfly主题
    1
    git rm --cached themes/butterfly
  3. git status—查看移除主题后的状态
  4. git add themes/butterfly/ (重新提交主题文件夹butterfl)
  5. git status —查看提交主题后的状态
  6. git commit -m "backup"
  7. git push origin hexo

参考

Hexo博客的备份与恢复
Hexo博客开发之——theme主题备份上传失败