Hexo网站的恢复策略

来源:互联网 发布:淘宝电影优惠券 编辑:程序博客网 时间:2024/04/29 00:09

起因

  • hexo deploy的时候,只提交public目录下的文件(这是个错误的认识,下文将解释).但是整个hexo项目的配置文件等关键文件还留在本地, 若网站发生一些错误配置,但没有记录配置的过程,造成的后果是不可逆的,于是要备份整个仓库
  • 原本的思路是,在hexo的根目录下git init,将根目录设置为一个git项目,在每次deploy的时候执行git push,项目就被保存在了另一个仓库,项目确实被保存在了另一个仓库,但是却没有发现这个仓库里少了一写东西
  • 在本地测试发布一篇博客的时候,报告错误,在此之前,修改了很多设置,于是想到回退整个仓库,并从远程clone之,当回退到确信没有错误的仓库时,还是报错,于是将问题放到新写的markdown文件上,发现修改了一下格式后,就能正确本地测试,也就是说,解决了最开始的问题.
  • 但是出现了另一个问题,在将博客推送到服务器的时候,报告缺少.git文件,根据网上论坛提示进行hexo init.(这是错误的,下文解释),在执行完hexo init后(其实没有执行完,中途报错退出了,因为已经存在hexo项目),后果就是这个命令导致缺少一系列配置文件,并缺少了deploy的必要模块,于是重新安装模块…
  • 再次把仓库回退到正确的版本,并创建一篇格式正确的markdown(格式问题是,设置自动识别代码语言造成的,应关闭该功能),本地测试通过,提交成功(意不意外,惊不惊喜,同样的流程为什么上一步会出现这么复杂的错误的,可能是我改了其他配置吧),但是本应提交网站的仓库,提交了和备份相同的内容,意识到一定是某个配置文件出错,但是正确的仓库版本不应该出现错误的配置文件,
  • 于是查看模块代码,在deploy有关模块中看到,会先提交.deploy_git里面的内容,如果该目录不存在,则创建之,否则会调用hexo目录下的.git,凑巧我的项目根目录下有这个文件,于是提交了整个项目,问题渐渐清晰
  • 但是项目根目录下有.deploy_git目录,但这个目录是空的
  • 于是拿一个新的hexo项目进行测试,从0开始到发布博客走一遍,看到新的hexo的.deploy_git项目下有文件,而且是网站的发布文件,这才发现了最开始的错误认识,网站并不是发布的public而是.deploy_git.这个目录是一个仓库
  • 于是直接clone网站仓库,将这个仓库改名为.deploy_git,网站又正常提交了.但是注意到,提交后的备份代码.deploy_git目录还是为空
  • 经过一翻搜索,了解到了git 子模块(submodule)的概念,并理解相关操作,很明显.deploy_git就是整个项目的子模块,成为子模块的原因是我在根目录执行了git init
  • 查询到在项目中添加子模块的方法,.deploy_git模块确确实实已经存在,而且是hexo自动创建,我不能用创建新子模块的方法把这个模块设置为子模块,方法中也提到,创建完成子模块会多一个配置文件,我在本地添加这个配置文件,提交到仓库,无果
  • 直接在github网站上添加配置文件,然后pull,配置文件就被同步到了本地
  • 重新clone网站,按照子模块的操作步骤,可以将整个网站(包括.deploy_git)备份下来
  • 问题解决

操作

  • 准备
    1. 在本地仓库根目录git init,目的是添加.git目录.push 本地仓库
    2. 手动在远程备份仓库添加.gitmodules
    3. pull备份仓库
  • 正常发布
hexo cleanhexo generatehexo deploy git add -f *git commit -m "备份"git push origin master
  • 恢复

    1. git clone git@github.com:RigeI/blog.git
    2. git submodule init
    3. git submodule update
  • 注:不能使用git clone git@github.com:RigeI/blog.git --recursive进行恢复

结束语

  • 上面提到的任何不懂的信息请自行百度,完全了解后再对网站源码进行修改,否则会进一步扩大对网站和备份的破坏
原创粉丝点击