以 root 用户的身份登录服务器,执行以下命令:

  • 安装相关依赖(Optional)
1
$ apt install git nginx -y
  • 创建文件路径并修改权限
1
2
3
$ mkdir /opt/hexo
$ chown -R $USER:$USER /opt/hexo
$ chmod -R 755 /opt/hexo
  • 创建 Git 仓库
1
2
$ cd /opt/hexo
$ git init --bare blog.git
  • 配置 Nginx 托管文件目录
1
2
3
4
5
6
7
$ mkdir /var/www/hexo
$ chown -R $USER:$USER /var/www/hexo
$ chmod -R 755 /var/www/hexo
$ vim /etc/nginx/sites-available/default
---
root /var/www/hexo;
---
  • 配置 Git-hooks
1
2
3
4
5
6
$ vim /opt/hexo/blog.git/hooks/post-receive
---
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/opt/hexo/blog.git checkout -f
---
$ chmod +x /opt/hexo/blog.git/hooks/post-receive

在本机的博客 Git 仓库内,执行以下操作:

  • 编辑站点配置文件 _config.yml ,修改 Deployment 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Original
deploy:
type: git
repository: git@github.com:Ling-Yuchen/Ling-Yuchen.github.io.git
branch: master

# Now
deploy:
- type: git
repository: git@github.com:Ling-Yuchen/Ling-Yuchen.github.io.git
branch: master
- type: git
repository: root@<ip-address>:/opt/hexo/blog.git
branch: master
  • 打开 Git Bash 终端,执行以下命令尝试部署:
1
2
$ hexo clean
$ hexo g -d

补充:什么是 Git-hooks ?

git hooks 是 Git 提供的一个特性,允许脚本在某些 Git 操作的关键点被自动执行。这些钩子都被存储在 Git 仓库的 .git/hooks 目录下。当你用 git init 初始化一个新的仓库时,Git 会默认为这个仓库设置一些示例钩子。

每个钩子都是一个脚本,可以是 Bash 脚本、Python 脚本、Ruby 脚本等。默认情况下,示例钩子都是不会执行的,除非你修改它们并去掉.sample的后缀。

以下是一些常见的 git hooks 以及它们的使用场景:

  1. pre-commit:在提交之前运行。它用于检查即将提交的快照,例如,检查代码风格、运行单元测试、检查lint错误等。如果这个脚本退出时返回非零值,Git 将放弃此次提交。
  2. prepare-commit-msg:在提交消息编辑器打开前运行。可以用于格式化提交消息,或者根据提交的内容和提交者等因素设置默认的提交消息。
  3. commit-msg:在提交时检查提交消息。可以用来确保提交信息遵循特定的模板。
  4. post-commit:在提交完成后运行。通常用于通知或其它不影响提交本身的操作。
  5. pre-push:在 git push 命令上传到远程之前。可以用来运行测试,确保不会把有问题的代码推送到主分支。
  6. post-receive:在远程仓库中,当推送完成后执行。通常用于部署任务或向其他服务发出通知。

这只是钩子的一部分,Git 提供了很多其他类型的钩子。

总之,git hooks 提供了一种强大的机制,使开发者可以在各种Git操作过程中自动运行脚本,从而帮助团队遵循代码质量标准、运行自动化任务、增强开发流程等。

回答来自 GPT-4