先来说明为什么你在那些目录下看不到普通的git仓库状态。这是因为我们使用了一个特殊的git部署方式:

  1. /home/git/blog.git 是一个”裸仓库”(bare repository):

    • 裸仓库只包含 git 的版本控制数据
    • 不包含实际的工作文件
    • 所以你在这里运行 git status 会报错是正常的
  2. 整个部署流程是这样的:
    当在本地运行 hexo g -d 时:

    • 首先,Hexo 在你的本地生成静态文件(在 public 目录)
    • 然后,将这些文件推送到服务器的裸仓库 /home/git/blog.git
    • 最后,触发你之前配置的 post-receive 钩子
  3. 关键在于你配置的这个 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. 运行部署命令:
    1
    2
    3
    hexo clean
    hexo generate
    hexo deploy
  3. 然后查看服务器的 /home/www/website 目录,应该能看到更新后的文件

这就像是设置了一个自动传送带:

  • 你把文件推送到”收件箱”(blog.git)
  • 系统自动把文件从”收件箱”搬运到”展示区”(/www/website)
  • 最后 Nginx 负责把”展示区”的内容展示给访问网站的人