揭秘 .deploy_git 目录:hexo-deployer-git 如何保留 Git 提交历史及一键重置方法
【免费下载链接】hexo-deployer-gitGit deployer plugin for Hexo.项目地址: https://gitcode.com/gh_mirrors/he/hexo-deployer-git
hexo-deployer-git是 Hexo 静态博客的官方 Git 部署插件。每次执行部署命令时,它都会在站点根目录下一个名为.deploy_git的隐藏目录里悄悄完成初始化、同步与推送——而这个目录正是决定部署分支提交历史是否得以保留的关键。这篇文章带你从零看懂:.deploy_git从何而来、hexo-deployer-git 如何保留 Git 提交历史,以及出问题时如何一键重置。
1. .deploy_git 是什么?
.deploy_git是 hexo-deployer-git 自动创建的本地中转仓库(暂存工作区)。每次部署时,它的工作流程大致分三步:
- 目录不存在→ 自动创建并执行
git init,生成一个占位的 "First commit" 提交; - 清空目录旧文件,把最新的
public/静态产物(以及你配置的extend_dirs附加目录)复制进来; - 执行
git add+git commit,然后**强制推送(force push)**到你配置的部署仓库(如gh-pages分支)。
这个目录的定义可以在源码中一眼看到:lib/deployer.js,其中deployDir就是站点根目录 + '.deploy_git'。
💡 一句话理解:.deploy_git= 部署分支的「本地镜像」+ 提交历史的载体。
2. hexo-deployer-git 如何保留 Git 提交历史
2.1 目录不存在时:自动初始化历史起点
首次部署时,插件会执行 lib/deployer.js 中的setup()流程:
创建空的 placeholder 占位文件 → git init → git add -A → 提交 "First commit"从这一刻起,.deploy_git就是一个合法的 Git 仓库,之后的每一次部署都在这段历史上追加新提交。
2.2 目录已存在时:直接复用整段历史
这是保留历史的核心判断逻辑,位于 lib/deployer.js:如果.deploy_git已存在,就跳过初始化,直接沿用当前仓库(连同它的全部提交历史)。正因如此,你不需要在每次部署前做任何操作,历史就自然延续下来。
2.3 强制推送,保证远端与本地完全一致
每次部署结束,插件都会执行带--force的推送(见 lib/deployer.js 的push()),让远端部署分支与本地生成的站点内容完全对齐。
⚠️注意:force push 意味着远端分支上任何直接修改(例如手动向gh-pages提交的内容)都会在下次部署时被覆盖。所有改动都应集中放在 Hexo 源码目录中。
3. 进阶技巧:克隆远端仓库,继承已有提交历史
如果你的部署仓库里已经存在一段提交历史(比如之前手工推过内容),而.deploy_git还不存在,插件会从头新建历史,旧提交就"断档"了。官方推荐的做法是把部署仓库克隆到.deploy_git:
git clone <部署仓库地址> .deploy_git这样下次部署时,hexo-deployer-git 会以这段历史为基准继续提交推送,而不是重新开一个"孤儿"历史。官方说明见 README.md 的 "How it works" 一节。
4. 一键重置:删除 .deploy_git 即可
什么情况下需要重置?
- 部署分支历史混乱,想彻底推倒重来;
- 本地
.deploy_git与远端长期不同步,部署总报奇怪的错误; - 更换部署仓库或分支后,旧历史成为干扰。
官方的"一键重置"非常简单——直接删除整个目录:
rm -rf .deploy_git下次部署时,插件会自动重新初始化(官方文档见 README.md 的 "Reset" 一节),你会得到一份干净的新历史。
📌 提示:重置只影响本地,不会自动删除远端分支;但下次部署会用全新历史 force push 覆盖远端内容,操作前请确认远端没有需要保留的手动修改。
5. 新手常见问题 FAQ
Q:.deploy_git要提交进源码仓库吗?A:不需要。它只是本地工作目录,建议加入.gitignore。
Q:部署后自定义域名的 CNAME 文件丢失了?A:在站点的source/目录下新建一个CNAME文件并写入你的域名,这样每次构建都会把它带进部署分支。详细说明见 README.md。
Q:部署分支名可以自定义吗?A:可以。在_config.yml的deploy下配置type: git、repo(仓库地址)、branch(部署分支)即可;若不指定,GitHub 非用户主页仓库默认推gh-pages,分支推断逻辑见 lib/parse_config.js。完整配置项参考 README.md。
Q:插件是如何注册进 Hexo 的?A:只需一行注册代码,见 index.js,把git类型映射到部署实现 lib/deployer.js。
6. 小结
.deploy_git是 hexo-deployer-git 的部署"引擎室":
- 不存在→ 自动
git init,创建历史起点; - 已存在→ 复用现有提交历史,增量追加新提交;
- 想重来→ 删除目录一键重置,下次部署自动重建;
- 想继承远端旧历史→ 先
git clone到.deploy_git。
理解了这个目录,Hexo 的 Git 部署就不再是黑盒。动手试试吧!🚀
【免费下载链接】hexo-deployer-gitGit deployer plugin for Hexo.项目地址: https://gitcode.com/gh_mirrors/he/hexo-deployer-git
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考