grubby:用 Ruby 编写的、面向 Git 仓库的静态站点生成器
摘要
grubby 是一个用 Ruby 编写的、面向裸 Git 仓库的静态站点生成器,从 RepoRat 分叉而来。它会在 git hooks 上自动构建仓库网页和索引,专为 NearlyFreeSpeech.NET 这类共享主机环境而设计。
<p><a href="https://lobste.rs/s/xpyahx/grubby_static_site_generator_for_git">评论</a></p>
查看缓存全文
缓存时间: 2026/10/04 10:59
# grubby
来源:https://git.btxx.org/grubby/
用 Ruby 编写的、面向 Git 仓库的静态站点生成器。
fork 自并深受 RepoRat(https://www.ratfactor.com/repos/reporat/)启发。
## 环境要求
- Git
- Ruby 3.0+
- Kramdown
## 配置
Grubby 开箱即用,自带较强的设计立场。它旨在原样使用,无需太多调校。默认使用 Kramdown 作为 Markdown 解析器,你可以自由替换,但我无法保证替换后一切都能没有 bug!另外默认假定你所有的裸 git 仓库以 `.git` 扩展名结尾。核心仓库索引功能在缺少这一后缀时无法正常工作!
你*唯一*应该修改的文件是 `_config.yml`,用于设置核心域名和路径。
如果你想更换 CSS、导航链接或页脚内容,可以相应地编辑 `style.css`、`_header.html` 和 `_footer.html`。欢迎尝试!
默认情况下,核心的"仓库索引"会创建在主目录根部,文件名为 `index.html`。这个输出文件名也可以在 `_config.yml` 中修改。
## 使用方法
本指南假设你使用的是某种"共享主机"(这里是 **NearlyFreeSpeech.NET**)。虽然在自己的 VPS 上运行过程也会非常类似。
以下内容基于你的裸 git 仓库位于 `/home/public/git.sitename.org` 这一前提。
1. 将本项目克隆到你的私有目录(即 `/home/private/`)
2. 进入 `/home/public` 下的某个仓库(即 `cd coolrepo.git`)
3. 在 hooks 下创建一个新文件:`touch /hooks/post-update`
4. 给该文件赋予执行权限:`chmod +x /hooks/post-update`
5. 将以下代码添加到该文件中:
```sh
#!/bin/sh
unset GIT_DIR
# Needed for cloning over plain HTTP
git update-server-info
# Rebuild the static site from a temporary checkout
repo_name=$(basename "$PWD" .git)
temporary_dir=$(mktemp -d)
git clone --quiet "$PWD" "$temporary_dir/$repo_name"
cp "$PWD/description" "$temporary_dir/$repo_name/.git/description"
(cd "$temporary_dir/$repo_name" && ruby /home/private/grubby/grubby.rb)
rm -rf "$temporary_dir"
```
现在你可以试用一下了!只需运行:
```sh
./hooks/post-update
```
各个仓库的网站将生成在 `/home/public/git.sitename.org/coolrepo`,同时更新后的仓库索引(默认为 `index.html`)会生成在根目录 `/home/public/git.sitename.org/` 下。
你可以在此基础上扩展,例如改为在 `hooks/post-receive` 文件中调用,甚至使用全局的 `post-update`,以避免为每个项目重复包含这段脚本。
## 注意事项
- **不会**为单个 commit 变更、分支等生成页面。
相似文章
如果我的Git托管服务是一个静态网站生成器会怎样?
作者探讨了用静态网站生成器替代传统Git托管平台的方法,以减少服务器负载,并介绍了'sorcery'这个工具,它能为Git仓库生成静态HTML,并使用客户端渲染来查看历史记录。
Grit:用Rust和智能体重写Git
本文介绍了Grit,这是一个用Rust重新实现的Git新版本,通过了超过99%的Git测试套件,并且是通过AI智能体创建的。它旨在提供一种基于库、内存安全的替代方案,以取代原版Git。
用一个定制的静态网站生成器替代 Jekyll
nullprogram.com 的作者用 ssg 替代了 Jekyll,这是一个约 8000 行代码的定制静态网站生成器,采用「带模板的 C++20」编写,冷启动生成他的博客仅需 150 毫秒,零依赖且核心不依赖 libc。这一改变也解决了 Jekyll 糟糕的 Ruby 部署流程和 macOS 配置问题。
介绍 Grok Build(2 分钟阅读)
Grok Build 是一款从终端运行的新编码代理,目前面向 SuperGrok Heavy 订阅者提供早期测试版。它支持插件、子代理和深度工作树集成,包括用于脚本编写的无头模式。
Show HN: Gitdot – 一个更好的 GitHub。开源、反 AI、用 Rust 编写
Gitdot 是一个开源的、反 AI 的、用 Rust 编写的 Git 托管平台,旨在作为 GitHub 的更好替代方案。