博客部署拉取机制解析
先来说明为什么你在那些目录下看不到普通的git仓库状态。这是因为我们使用了一个特殊的git部署方式:
/home/git/blog.git
是一个”裸仓库”(bare repository):- 裸仓库只包含 git 的版本控制数据
- 不包含实际的工作文件
- 所以你在这里运行
git status
会报错是正常的
整个部署流程是这样的:
当在本地运行hexo g -d
时:- 首先,Hexo 在你的本地生成静态文件(在 public 目录)
- 然后,将这些文件推送到服务器的裸仓库
/home/git/blog.git
- 最后,触发你之前配置的
post-receive
钩子
关键在于你配置的这个
post-receive
钩子:1
git --work-tree=/home/www/website --git-dir=/home/git/blog.git checkout -f
这个钩子的作用是:
- 把
/home/www/website
作为工作目录 - 使用
/home/git/blog.git
中的 git 数据 - 强制检出最新的文件到工作目录
要测试是否正常工作,可以:
- 在本地博客做一个小修改
- 运行部署命令:
1
2
3hexo clean
hexo generate
hexo deploy - 然后查看服务器的
/home/www/website
目录,应该能看到更新后的文件
这就像是设置了一个自动传送带:
- 你把文件推送到”收件箱”(
blog.git
) - 系统自动把文件从”收件箱”搬运到”展示区”(
/www/website
) - 最后 Nginx 负责把”展示区”的内容展示给访问网站的人
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Priska's blog!