hexo 单一仓库同步博客源码和博客静态资源

最近又重新折腾起了hexo,之前一直只是将hexo生成的静态网站推送到服务器上的仓库,然后通过git hook在指定目录下同步生成的网站。每次执行hexo的命令时,这样只会同步生成的文件,对于博客本身的源码,是没有同步的。如果为了同步博客源码,又需要单独开一个仓库,而且同步的时候,需要分别同步博客源码和网站,会很麻烦。
为了避免需要开两个仓库以及手动同步两次,我们可以通过设置工作区和分支来将博客源码和网站放在同一个仓库下,并且借助git的hook来实现提交博客源码的时候自动同步网站。

服务器端设置

首先先在服务器端创建一个裸仓库,后续的博客源码和网站都会同步到这个仓库。

创建裸仓库

创建仓库的时候用–bare创建一个裸仓库。

1
2
3
mkdir ~/blog.git
cd ~/blog.git
git init --bare

添加hook脚本

在服务器端的仓库添加hook脚本的目的是在同步网站后将新的网站同步到nginx配置的目录下。
在git仓库下的hooks里创建post-receive,然后写入下面的内容。

1
2
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=~/blog.git checkout blog -f

post-receive hook是当有新的提交提交到仓库后,git会调用这个脚本。
上面的–work-tree是指定工作区目录,–git-dir是指定仓库位置,后面的checkout blog是切换到blog分支。
这里的切换分支就是用来实现单仓库仓房博客源码和网站的。将网站单独放到blog分支下,博客源码放到默认的master分支下,就可以实现单个仓库存放。
后面的-f是强制执行命令。

本地仓库设置

上面是服务器仓库的设置,接下来配置本地的仓库。

设置hexo同步地址

我们在设置hexo同步地址的时候,可以手动指定提交的分支,这里我们将这个分支设置为刚才在服务器端设置的分支。

1
2
3
4
5
6
7
deploy:

  type: 'git'
# user@ip填服务器的用户名和服务器地址
  repo: 'user@ip:~/blog.git'

  branch: 'blog'

设置到blog分支后,这样hexo同步到blog分支,远端仓库的hook就会在指定的工作区同步新的内容。

添加hook脚本

添加hook脚本前,先将刚才的远端仓库添加到我们本地仓库。

1
git remote add origin <仓库地址>

添加完仓库后,在.git目录下的hooks里添加post-commit文件,然后写入下面的内容。

1
2
3
4
5
#!/usr/bin/env python

import os

os.system('npm run clean && npm run build && npm run deploy')

post-commit是在git提交commit后会执行的脚本。
添加完这个hook后,当我们本地执行完git commit后,就会自动的同步新的内容到远端仓库。

本地仓库的提交

本地仓库只需要提交到非blog分支上就可以了,我们在服务器端只设置了blog分支下的内容同步到nginx目录下。


hexo 单一仓库同步博客源码和博客静态资源
https://www.limesea.world/2024/10/fda151742cf6.html
Author
limesea
Posted on
October 6, 2024
Licensed under