原文地址:http://www.neilron.xyz/hexo-blog-source-code-management/,转载请注明!
Hexo是一个快速,简单而又强大的博客框架,我们可以使用markdown语言写作文章,hexo就可以在几秒内结合主题生成静态的网页文件。hexo搭建和配置的文章很多,这里就不再赘述了,接下来
接下来我们会做什么
- 使用Git管理自己的文章和配置文件
- 使用Git子模块功能配置和更新hexo主题
1 管理文章
使用Git来管理自己的文件也有很多的教程,这里简单介绍如何以自己的私人云主机为目标,建立远端仓库,方便后续子模块管理hexo主题的描述。
1.1 初始化目录
完成了hexo init之后,我们的目录下就有了一个默认的.gitignore文件,已经将自动生成的文件和node模块排除,直接进行git init
,下面假定目录名为hexo_blog。
$ git init
1.2 第一次提交
完成第一次提交,因为.gitignore文件已经自动配好,所以只需要下面的代码。
$ git add .
$ git commit -m "first commit."
1.3 建立远程仓库
一个可以只需要接受push
的仓库,不需要工作目录,通常使用Git的裸目录作为团队协作的一个管理中心,在本地先创建一个裸仓库。
$ git clone --bare . ../hexo_blog.git
使用scp,ftp或者其它任何方法将这个裸库放到云主机上,放到用户Home目录(~/repos/hexo_blog.git)之后可以比较方便。
1.4 增加remote
回到本地的hexo_blog目录,我们先来配置一下ssh和相应的config文件,然后设置origin的branch和本地branch之间的关联关系。
$ git remote add origin yun:repos/hexo_blog.git
$ git branch --set-upstream master origin/master
冒号之后是ssh登录后的仓库所在的相对路径。
1.5 END
测试一下,完成。
$ git pull
Already up-to-date.
2 使用子模块管理hexo主题
通常我们会需要对主题做一些修改,配置文件的修改,源码的修改,比如最近多说挂掉之后,如果你的域名恰巧已有备案,那么畅言就是一个不错的选择,但是著名的hexo主题Next目前还没有支持畅言,这就需要我们自己进行一些修改(目前已支持,文档尚未更新)。
如果直接clone
仓库中的代码,就很难维护我们自己对主题做的修改,而直接复制主题的源码,又不能够跟踪主库中后续的更新。Git中有一个功能叫做子模块,正适合于我们主题源码的维护,一方面可以继续从主代码库获取更新,一方面也可以维护自己开发的代码。
下面以Next为例,说明一下配置过程。
2.1 FORK代码
首先fork
一份代码到我们自己的仓库。
如下图所示,
2.2 从fork
出来的仓库初始化本地子模块
$ git submodule add https://github.com/YourName/hexo-theme-next.git themes/next
这里参考了Hexo博客环境同步和Git子模块的建议,运行了git checkout master
,不过在我机器上似乎初始化下来的仓库已经在master分支上了,既然可能有这个问题,可以check一下,或者执行一下这条命令。
2.3 上传本地修改
进入主题目录,按照自己站点的要求修改完成主题的配置文件。
$ cd themes/next
$ git add .
$ git commit -m "first modift config file."
$ git push
子模块相当于一个独立的git目录,上面的操作将本次对配置文件的修改推送到了第一步fork的仓库中。
ps: 因为采用了这种方式管理主题文件,配置文件就变成了开源在github上,一定要注意不要把自己的个人信息等写在主题的配置文件里。
2.4 同步主题的更新
我们需要给本地仓库增加一个新的上游,取名叫upstream,并从这里拉取更新。
$ git remote set-url upstream https://github.com/iissnan/hexo-theme-next.git
$ git pull upstream master
没有冲突自动合并完就可以push到自己Fork的仓库了,有冲突的话需要查看并完成冲突处理,然后push到自己的仓库。
2.5 END
这样就完成了主题代码的维护,总结一下,就是remote origin维护本地的代码,upstream拉取更新并合并到本地。
3 自动部署更新
Hexo自带有部署功能,使用hexo d
。最常使用的还是Git方式的部署,实现的方式上就是将生成的HTML当做源码推送到远端仓库中。
3.1 初始化html的远端仓库
还是选择在源码的隔壁,配置一个html文件的远端仓库。
$ cd ~
$ mkdir hexo_blog_site.git
$ cd hexo_blog_site.git
$ git init --bare
3.2 安装插件和配置hexo站点配置文件
Git部署方式需要安装一个hexo插件hexo-deployer-git
$ npm install hexo-deployer-git --save
添加站点配置文件_config.yml
deploy:
type: git
repo: yun:repos/hexo_blog_site.git
branch: master
3.3 配置git钩子
如果需要,钩子是什么?
我们需要的是在接受到push请求之后执行一个操作,将目前的工作版本checkout出来,复制到指定的目录下,需要配置的对应的钩子文件是post-receive。
#!/bin/sh
rm -r /var/www/blog.neilron.xyz/*
git --work-tree=/var/www/blog.neilron.xyz --git-dir=/home/neil/repos/ron_blog_site.git checkout -f
3.4 END
测试一下钩子是否能正常运行,可能有目标文件夹的权限等问题,使用nginx或其它服务器软件伺服根目录下的index.html等这些问题就不在这里赘述了,本文主要是想总结下关于源代码管理的一些事项。
4 在新环境完成配置
当来到一个新的机器,当然Node.js
和 Git
两个工具是必不可少的。之后首先完成代码的clone和子模块适合的初始化。
$ git clone yun:repos/hexo_blog.git
$ git submodule init
$ git submodule update
第一次初始化之后,子模块的head可能是游离的,如果直接提交了变更就会带来问题,记得先放到master上,运行
$ cd themes/next
$ git checkout master
代码配置完成之后,执行
npm install
就可以完成package.json中所有依赖的安装了,尝试一下hexo -s
,新的工作节点上可以编译出一样的静态站点了。
欢迎来访~ Ron's Blog