大体思路

同步两个端代码的思路和 Github 推拉源码思路差不多,发布的时候只需要保证当前在使用的端的文件最新就行。

需要在仓库新建一个分支,让后把它重新作为默认分支。例如,若原来部署 Hexo 在 github 上的分支是 master (好像现在很多变成了 main),这时候应该是有且只有一个分支,那么就再新建一个 hexo 分支(名字随便),并且设置其为默认分支。

  • 这里需要解释一下,这个 hexo 分支就是我们以后存放博客源文件的分支,只需要在其上更新内容就行,原来的 master 分支会因为 hexo g -d 指令编译 hexo 后自动更新。

A 端操作

接下来讲讲具体操作。

首先,在 windows 上的本地博客根目录里面执行代码。

1
2
3
4
5
6
7
8
9
10
11
# 执行代码前,需要删除根目录下和主题目录(theme)下隐藏的 `.git` 文件夹
# 执行代码前,需要删除根目录下和主题目录(theme)下隐藏的 `.git` 文件夹
# 执行代码前,需要删除根目录下和主题目录(theme)下隐藏的 `.git` 文件夹
git init # 初始化
git remote add origin https://github.com/用户名/仓库名.git # 添加仓库
# 如果仓库搭建在自己的服务器上,使用下面代码
# git remote add origin <用户名>@服务器ip:/仓库位置/仓库名.git
git checkout -b hexo # 新建一个分支 hexo 并且切换到该分支
git add . # 添加所有本地文件到 git
git commit -m "blog源文件"
git push origin hexo # 文件推到 hexo 分支

执行完后,此时博客的源文件应该同步到 github 博客仓库(或者是自己搭建的 git 服务)的 hexo 分支上了。

(这里记得在仓库把新的 hexo 分支作为默认分支)

1
2
# 在仓库下执行
git symbolic-ref HEAD refs/heads/hexo

避坑

  • 本人是在自己的服务器上搭建的 git 服务,并且用 nginx 反向代理;

  • 这里有一个坑,之前在服务器上博客仓库中 hooks 下的 post-receive 文件中是把仓库中的主分支推到 nginx 托管的目录下,现在主分支变成了 hexo,所以需要修改一下 post-receive 文件,否则就将源码反代到了 nginx 托管的目录下从而导致 403

  • 重新修正 post-receive 文件

    1
    2
    #!/bin/sh
    git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f master

B 端操作

接着在 mac 上选个文件夹先把仓库克隆下来(需要克隆的是 hexo 分支,所以上面要设置成默认分支):

1
git clone xxx(仓库的地址)

在这个选好的文件夹下重新安装 hexo,因为 .gitignore 中过滤了 node_modules\ 所以需要重新部署 hexo 获取其必要组件:

1
2
3
4
5
6
7
8
9
10
11
# 没安装 homebrew 的话执行下面代码安装
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
# 安装成功会有提示

brew install node # mac 上如果安装了 homebrew 直接安装 node
npm -v # 可以通过此代码查看当前 npm 是否安装成功

# 使用 npm 安装组件
npm install -g hexo
npm install
npm install hexo-deployer-git --save

最后在 mac 上做一些修改,调整版本冲突后的合并策略,执行下面代码:

1
2
3
4
5
6
7
8
9
# 添加源文件
git add .
# git 提交
git commit -m ""
# 先拉原来 GitHub 分支上的源文件到本地,进行合并
# 分支名后面的"--allow-unrelated-histories"是为了弹出"fatal: refusing to merge unrelated histories."的错误
git pull origin hexo --allow-unrelated-histories
# 比较解决前后版本冲突后,push 源文件到 GitHub 的分支
git push origin hexo

此时,依次执行 hexo clean / hexo g / hexo d 更新博客,无报错就是成功了。

以后在任何端更新博客前先 git pull 一下,然后只需要记得在 hexo g -d 之前,用 git push 把修改的推送到仓库。

本文转载于:http://suburbiaxx.fun/posts/d9491508