基于Jekyll的静态GitHub博客搭建(基础)


“Jekyll is everything that I ever wanted in a blogging engine. Really. It isn’t perfect, but what’s excellent about it is that if there’s something wrong, I know exactly how it works and how to fix it. It runs on the your machine only, and is essentially an added “build” step between you and the browser. I coded this entire site in TextMate using standard HTML5 and CSS3, and then at the end I added just a few little variables to the markup. Presto-chango, my site is built and I am at peace with the world.” ——by Carter Allen

我是Fedora KDE43操作系统:

             .',;::::;,'.                 username@hostname
         .';:cccccccccccc:;,.             --------
      .;cccccccccccccccccccccc;.          OS: Fedora Linux 43 (KDE Plasma Desktop Edition) x86_64
    .:cccccccccccccccccccccccccc:.        Host: HP ZBook Power 16 inch G11 A Mobile Workstation PC (SBKPFV3)
  .;ccccccccccccc;.:dddl:.;ccccccc;.      Kernel: Linux 6.18.13-200.fc43.x86_64
 .:ccccccccccccc;OWMKOOXMWd;ccccccc:.     Uptime: 11 hours, 11 mins
.:ccccccccccccc;KMMc;cc;xMMc;ccccccc:.    Packages: 3410 (rpm), 16 (flatpak), 9 (snap)
,cccccccccccccc;MMM.;cc;;WW:;cccccccc,    Shell: bash 5.3.0
:cccccccccccccc;MMM.;cccccccccccccccc:    Display (AUOA0A9): 2560x1600 @ 1.5x in 16", 120 Hz [Built-in]
:ccccccc;oxOOOo;MMM000k.;cccccccccccc:    DE: KDE Plasma 6.6.1
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc;    WM: KWin (Wayland)
ccccc;XMO';cccc;MMM.;cccccccccccccccc'    WM Theme: Breeze
ccccc;MMo;ccccc;MMW.;ccccccccccccccc;     Theme: Breeze (Dark) [Qt], Breeze-Dark [GTK2], Breeze [GTK3]
ccccc;0MNc.ccc.xMMd;ccccccccccccccc;      Icons: breeze-dark [Qt], breeze-dark [GTK2/3/4]
cccccc;dNMWXXXWM0:;cccccccccccccc:,       Font: Noto Sans (10pt) [Qt], Noto Sans (10pt) [GTK2/3/4]
cccccccc;.:odl:.;cccccccccccccc:,.        Cursor: breeze (24px)
ccccccccccccccccccccccccccccc:'.          Terminal: konsole 25.12.2
:ccccccccccccccccccccccc:;,..             CPU: AMD Ryzen 7 8845HS (16) @ 5.10 GHz
 ':cccccccccccccccc::;,.                  GPU 1: NVIDIA GeForce RTX 4050 Max-Q / Mobile [Discrete]
                                          GPU 2: AMD Radeon 780M Graphics [Integrated]
                                          Memory: 7.28 GiB / 30.62 GiB (24%)
                                          Swap: 0 B / 8.00 GiB (0%)
                                          Disk (/): 85.79 GiB / 951.27 GiB (9%) - btrfs
                                          Local IP (wlp4s0): 
                                          Battery (Primary): 98% [AC Connected]
                                          Locale: en_US.UTF-8

个人博客搭建指南Chirpy


第一步:准备环境 (Fedora)

其他系统按照 Jekyll 官方文档 中的说明完成基础环境的安装。同时还需要安装 Git

Jekyll 是基于 Ruby 语言的,所以我们需要先安装 Ruby 和相关的开发工具。

Konsole 中执行以下命令安装 Ruby 及其开发环境:

# 1. 安装系统依赖
sudo dnf install ruby ruby-devel git gcc gcc-c++ make zlib-devel

# 2. 配置环境变量(避免权限问题,将 Gem 安装在用户目录)
echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 3. 安装 Jekyll 和 Bundler
gem install bundler jekyll

第二步:项目初始化与本地预览

使用现成的chirpy-starter的模板创建自己的库
image
将新仓库命名为<username>.github.io,其中<username>是你的GitHub用户名,如果包含大写字母需要转换为小写, 然后点击Create repository就可以创建仓库。
比如我的用户名是rockosdev,则仓库名为rockosdev.github.io。
image

然后打开该仓库的Actions工作流。 在该仓库, Settings->左侧栏Pages->Build and deployment->选择GitHub Actions, 上面会显示“Your site is live at https://rockosdev.github.io/ ”, 通过Visit site访问。
image

点击自己仓库绿色Code--复制仓库路径(以下操作)
image

克隆仓库
# 建议先在 GitHub 上 Fork 目标仓库,然后克隆你自己的版本
git clone https://github.com/你的用户名/你的用户名.github.io.git
cd 你的用户名.github.io

安装项目依赖
# 根据项目根目录下的 Gemfile 自动安装插件
bundle install

启动本地服务器
# 启动预览模式
bundle exec jekyll serve

例如我的:(使用GitHub下载大概率会超时: 设置http.sslVerify为 "false",临时禁用SSL验证)

$ git config --global http.sslVerify "false"
$ git clone https://github.com/rockosdev/rockosdev.github.io.git
$ cd rockosdev.github.io

进入rockosdev.github.io(仓库根目录)之后会有很多文件, 在下运行bundle install命令以安装依赖项。
image
看到....looking for funding就成功了
image

然后使用bundle exec jekyll serve命令启动本地 Jekyll 服务器, 按住Ctrl使用鼠标点击链接(Server Address:处的http://127.0.0.1:xxxx)访问, 使用Ctrl+c关闭服务
image

设置一些基本配置, 如下:
_config.yml 变量详解

变量 含义 示例值
url 网站的完整域名地址(用于生成绝对链接、RSS、SEO) https://rockosdev.github.io
avatar 个人头像图片的路径或 URL /assets/img/common/avatar.png
timezone 网站使用的时区,影响文章发布时间显示 Asia/Shanghai
lang 网站的主要语言代码,用于 HTML 语言属性 zh-CN
配置示例
# _config.yml
# 网站地址(必须填写,RSS/SEO 需要)
url: https://<username>.github.io
# 头像路径(相对于网站根目录,或填完整 URL)
avatar: /assets/img/common/avatar.png
# 时区 - 中国用户使用 Asia/Shanghai
timezone: Asia/Shanghai
# 语言 - 中文站点用 zh-CN,英文用 en
lang: zh-CN

实操:使用编辑器(我使用vim)打开仓库根目录下的_config.yml文件,

~/rockosdev.github.io$ vim _config.yml

使用/url定位到url处,将https://rockosdev.github.io添入双引号中。
image
使用/avatar定位到avatar处, 冒号后面添加 /assets/img/common/avatar.png(前面有空格)。
image
我只修改了这两处,其他地方再说,然后:wq保存退出。

头像需要在相应目录下新建文件,添加图片。

~/rockosdev.github.io$ cd assets
~/rockosdev.github.io/assets$ ls
lib
~/rockosdev.github.io/assets$ mkdir img
~/rockosdev.github.io/assets$ cd img
~/rockosdev.github.io/assets/img$ mkdir common
~/rockosdev.github.io/assets/img$ cd common
~/rockosdev.github.io/assets/img/common$(比如我把Home目录下修改为`avatar.png`的头像图片移到此处)
~/rockosdev.github.io/assets/img/common$ mv ~/avatar.png ./
~/rockosdev.github.io/assets/img/common$ ls
avatar.png

当再次启动本地服务器的时候就可以看到改变了
image


第三步自动化发布脚本 (deploy.sh)

此时我们只能在电脑本地访问,要想在网上访问,就需要部署到GitHub平台上去, 这样谁都可以就能通过https://username.github.io访问你的网站了。
在你的博客根目录下创建一个名为 deploy.sh 的文件,它可以帮你一键完成“添加、提交、推送”三连:

~/rockosdev.github.io$ vim deploy.sh

将以下内容粘贴到deploy.sh里面, 然后:wq保存退出

#!/bin/bash

# 获取提交信息,默认为当前日期时间
msg=${1:-"Update blog $(date +'%Y-%m-%d %H:%M:%S')"}

echo -e "\033[0;32m>> 开始部署到 GitHub...\033[0m"

# 1. 暂存所有更改
git add .

# 2. 提交更改
git commit -m "$msg"

# 3. 推送到远程仓库 (请确认你的主分支名为 master 或 main)
git push origin main

echo -e "\033[0;32m>> 部署完成!GitHub Pages 正在构建中...\033[0m"

赋予权限与使用:

chmod +x deploy.sh
./deploy.sh 

填写你的的github用户名<username>
image
填写你的的github账户密码<password>
image

会发现GitHub已经不支持密码授权了,我们换一种方式,使用个人令牌访问。按下Ctrl, 点击GitHub链接,
image

点击右上角头像 → Settings, 左侧最下方 → Developer settings → Personal access tokens → Tokens (classic)
image
image
image

点击 Generate new token (classic), Note随便写,过期时间(Expiration)可以选择更久,Scopes勾选 repo获得完整仓库权限, 然后点击Generate token
image
image

复制令牌(token),注意只出现一次, 可以保存在电脑其他地方,以便再登陆使用。
image

再次执行自动部署脚本./deploy.sh, 只是输出输入账户密码是输入刚才复制的令牌就行了。
image

打开GitHub, 博客已经更新,浏览器输入‘https://username.github.io`,发现已经可以访问了。
image
image


第四步:文章撰写模板

jekyll官方

jekyll基础

文件/目录 描述
_config.yml 存储 Jekyll 站点的全局配置数据,是网站的核心配置文件。包含网站标题(title)、描述(description)、作者信息(author)、时区(timezone)、分页设置(paginate)、插件列表(plugins)、主题配置(theme)等。修改此文件后通常需要重启本地服务器才能生效。
_posts 存放博客文章的核心目录。文件名必须遵循 YYYY-MM-DD-title.md 格式,例如 2026-02-24-hello-world.md。文件中的日期和标记语言由文件名决定,文章正文使用 Markdown 语法编写,顶部需包含 YAML Front Matter 配置。Jekyll 会自动根据文件名中的日期排序并生成文章页面。
_data 存放格式化的数据文件,支持 .yml.yaml.json.csv.tsv 等格式。Jekyll 会自动加载此目录下的所有文件,可通过 Liquid 标签 {{ site.data.filename }} 访问。常用于存储导航菜单、友情链接、技能列表等结构化数据,方便在模板中循环渲染。
_site Jekyll 构建后生成的静态网站输出目录,包含所有转换后的 HTML、CSS、JavaScript 文件。该目录由 Jekyll 自动生成,不应手动修改其中的内容。在本地开发时可通过 --destination 指定其他路径,部署时通常会将此目录内容上传到服务器。必须添加到 .gitignore 中避免提交到版本控制。
_plugins 存放自定义 Jekyll 插件的 Ruby 脚本文件(.rb),用于扩展 Jekyll 的核心功能。例如自定义标签、过滤器、生成器等。注意:GitHub Pages 默认不支持自定义插件(出于安全考虑),如需使用需在本地构建后上传 _site 目录,或使用 GitHub Actions 工作流。
_tabs Chirpy 主题特有目录,用于存放顶部导航栏的标签页面。每个 .md 文件对应一个导航标签,如 about.md(关于)、archives.md(归档)、categories.md(分类)、tags.md(标签)等。文件需包含 iconorder 等 Front Matter 参数控制显示图标和排序。
assets 存放网站静态资源文件,是前端资源的核心目录。Chirpy 主题中通常包含:
- img/:图片文件,文章配图、封面图、头像等
- css/:样式表文件(通常由 Sass 编译生成)
- js/:JavaScript 脚本文件
- fonts/:自定义字体文件
这些文件会被 Jekyll 原封不动地复制到生成的网站中,引用路径以 /assets/ 开头。
tools Chirpy 主题提供的工具脚本目录,包含项目初始化、部署、测试等辅助脚本。常见文件包括:
- init.sh:项目初始化脚本
- deploy.sh:一键部署脚本
- run.sh:本地开发服务器启动脚本
- test.sh:代码测试脚本
简化日常开发运维操作,可直接在终端执行。
index.html 网站首页文件,Jekyll 会对其进行转换处理。Chirpy 主题中通常使用布局(layout: home)自动渲染最新文章列表,无需手动编写 HTML。也可使用 index.md,只要包含 Front Matter 即可被 Jekyll 处理。
Gemfile Ruby 的依赖管理文件,定义项目所需的 Gem 包及其版本范围。包含 Jekyll 核心版本、主题(如 jekyll-theme-chirpy)、插件(如 jekyll-paginatejekyll-sitemap 等)。通过运行 bundle install 安装所有依赖,确保开发环境与生产环境一致。
Gemfile.lock 锁定依赖版本的文件,由 Bundler 自动生成。记录了当前使用的每个 Gem 包的确切版本号,确保团队成员或部署环境使用完全相同的依赖版本,避免因版本差异导致的兼容性问题。不应手动修改,通过 bundle update 更新。
LICENSE 项目开源许可证文件,说明该项目的使用、修改、分发权限。Chirpy 主题通常使用 MIT License,允许自由使用、修改和商业用途,但需保留版权声明。
README.md 项目说明文档,使用 Markdown 编写,是项目的"门面"。通常包含:项目简介、在线演示链接、功能特性、安装步骤、配置说明、目录结构、更新日志、贡献指南、许可证信息等。GitHub 会自动渲染此文件显示在项目主页。
assets/
└── img/
    ├── common/                          # 网站通用图片(非文章相关)
    │   ├── avatar.png                   # 个人头像
    │   ├── favicon.ico                  # 网站图标
    │   ├── logo.png                     # 站点 Logo
    │   ├── banner-home.jpg              # 首页横幅
    │   └── 404-bg.png                   # 404页面背景
    │
    ├── posts/                           # 文章专用图片(核心目录)
    │   ├── cpp/                         # 第一部分:C++部分
    │   │   ├── 2026-02-24-jekyll-setup/
    │   │   │   ├── cover.png            # 文章封面
    │   │   │   ├── step1-install.png    # 步骤截图
    │   │   │   └── step2-config.png
    │   │   ├── 2026-02-25-chirpy-theme/
    │   │   │   ├── cover.png
    │   │   │   ├── preview-desktop.png
    │   │   │   └── preview-mobile.png
    │   │   └── 2026-02-26-giscus-comment/
    │   │       ├── cover.png
    │   │       └── comment-demo.png
    │   │
    │   ├── vim/                        # 第二部分:VIM部分
    │   │   ├── 2026-03-01-git-basics/
    │   │   │   ├── cover.png
    │   │   │   ├── git-flow.png
    │   │   │   └── merge-conflict.png
    │   │   └── 2026-03-05-github-actions/
    │   │       ├── cover.png
    │   │       └── workflow-diagram.png
    │   │
    │   └── linux/                     # 第三部分:Linux部分
    │       ├── 2026-01-15-travel-beijing/
    │       │   ├── cover.png
    │       │   ├── forbidden-city.jpg
    │       │   └── great-wall.jpg
    │       └── 2026-01-20-reading-list/
    │           ├── cover.png
    │           └── book-covers/
    │               ├── book1.jpg
    │               └── book2.jpg
    │
    └── diagrams/                        # 跨文章复用的图表(可选)
        ├── architecture-common.png
        └── flowchart-template.png

新文章请放置于 _posts/ 目录,文件需命名为 YYYY-MM-DD-filename.md。

文章中插入图片示例:比如C++文章封面图片(Chirpy主题的CSS类标记语法

# 普通样式
![photo-name](assets/img/posts/blog/2026-02-24-jekyll-setup/cover.png)
# 特别样式(Chirpy主题常用的 CSS 类标记语法:.shadow添加阴影效果,.rounded-1010px 圆角)
![photo-name](assets/img/posts/blog/2026-02-24-jekyll-setup/cover.png){: .shadow .rounded-10 }
---
title:              "基于Jekyll的静态GitHub博客搭建"    # 文章标题(必需)
date:               2026-02-24 11:20:00              # 发布时间(必需)
last_modified_at:   2026-02-25 15:30:00              # 更新时间
toc:                true                             # 显示文章目录
categories:         [Blog, Jekyll]                   # 文章分类(一级目录, 二级目录, 最多支持二级目录,首字母大写)
tags:               [blog]                           # 文章标签(可多个, 全部小写)
---

正文从这里开始

写博客实操

我们来实操写一篇文章, 就是本文, 我打算把第一篇搭建博客的本文放在存放自己本地的博客核心目录(rockosdev.github.io)的子目录(_posts)的blog(新建的)下面

cd ~/rockosdev.github.io/_posts
~/rockosdev.github.io/_posts$ mkdir blog
~/rockosdev.github.io/_posts/blog$ vim 2026-02-24-基于Jekyll的静态GitHub博客搭建.md
---
title:              "基于Jekyll的静态GitHub博客搭建"   
date:               2026-02-24 11:20:00             
last_modified_at:   2026-02-25 15:30:00             
toc:                true                         
categories:         [Blog, Jekyll]                   
tags:               [blog]                        
---

为了符合标准的 YAML 规范, 正确渲染到浏览器上,请确保博客最前面如下说明

  • 第一行确保是---(三个短杠)
  • 然后title部分的标题最好使用双引号,如果后面标题包含空格,或者其他特殊符号就会破坏title的正确解析, 然后可能出现乱码
  • 然后以---结束
  • 后面可以写正文了

比如我的文章, markdwonw也可以写html(就是我写的html语法)。

image

然后:wq保存,回到cd ../../本地仓库根目录下面

~/rockosdev.github.io$
~/rockosdev.github.io$ls
assets       _data      Gemfile       index.html  _plugins  README.md  _tabs
_config.yml  deploy.sh  Gemfile.lock  LICENSE     _posts    _site      tools
~/rockosdev.github.io$./deploy.sh

访问https://username.github.io, 我的用户名(username)是rockosdev, 所以访问https://rockosdev.github.io

image
image
image
image
image

打开文章,我们会发现,它的网址里面包含中文,根据互联网的标准协议(RFC 3986)规定,URL 只能包含英文字母、数字和少数特殊符号。当我们输入包含中文的网址时,浏览器会自动将其进行 UTF-8 编码,然后转换成“百分号编码”格式,比如中文部分中文会编码成类似%E4%B8%AD%E6%96%87格式,虽然技术上也可以支持中文,但是不容易阅读。所以我们可以将它更改成英文。
image

# 修改文件名字
# mv older_file_name  new_file_name
~/rockosdev.github.io/_posts/$ mv 2026-03-01-基于Jekyll的静态GitHub博客搭建.md 2026-02-24-jekyll-guid
~/rockosdev.github.io/_posts/blog$ ls
2026-02-24-jekyll-guide.md
~/rockosdev.github.io/_posts/blog$ cd ../../
~/rockosdev.github.io$ ./deploy.sh
>> 开始部署到 GitHub...
[main c557955] Update blog 2026-03-01 21:51:45
 Committer: username <username@xxx.xxx.x.xxx>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 2 deletions(-)
 rename "_posts/blog/2026-03-01-\345\xxx\xxx\xxx\GitHub\xxx\xx\xxx\272.md" => _posts/blog/2026-02-24-jekyll-guide.md (99%)
fatal: unable to access 'https://github.com/rockosdev/rockosdev.github.io.git/': OpenSSL SSL_read: OpenSSL/3.5.4: error:0A000126:SSL routines::unexpected eof while reading, errno 0
>> 部署完成!GitHub Pages 正在构建中...

# 有时候发现会发现`unable to access`发布失败(有可能网络不太好造成的), 等会再发布。
~/rockosdev.github.io$./deploy.sh
>> 开始部署到 GitHub...
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 16 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 8.28 KiB | 8.28 MiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/rockosdev/rockosdev.github.io.git
   9597624..c557955  main -> main
>> 部署完成!GitHub Pages 正在构建中...

本地部署完,然后等几分钟就可以访问网上访问我们刚写的文章啦。

image

03/21/2026 补充:目录, 和文章链接
image

如果我们需要在体现层级目录,基于Chirpy主题,框架为Jekyll的博客渲染不一样。比如平素我们写一级目录是 # 第五步:开启giscus评论区对吧, 但是经过该主题博客渲染后, 我们访问的并不能识别为一级目录, 而正确的做法是再增加一个#, 即## 第五步:开启giscus评论区这样才是一级目录, 其他级别同理, 多加一个#即可。

还有一个要注意的是,如果要我们的一篇博文中包含另一篇博文, 最经典的是情况是我们要写一篇关于目录的博文, 这需要包含其他博文的链接。这就需要两种方法:一种是把方案是把经过渲染可以公共访问的链接附上;另一种是在博客相对层级中引用。个人测试后者比较快。

# 第一种粘贴发布文章后的链接:比如本文发布的链接是`https://i.cnblogs.com/articles/edit;postId=19631769`, 作为目录应该这样写
[基于Jekyll的静态GitHub博客搭建](https://i.cnblogs.com/articles/edit;postId=19631769)

# 第二种博客相对层级别目录中引用, 都需要从博客根目录下开始。
# (1)如果在网络静态资源目录(assets)下,假设文章是assets/cpp/2026-03-21-introduce-jekyll.md, 那链接就是如下:
[基于Jekyll的静态GitHub博客搭建](assets/cpp/2026-03-21-introduce-jekyll.md)
# (2)但是网络静态资源目录是存放照片的,不适合放文章, 而我们的专门放文章的地方是`_posts`下, 假设文章是`_posts/cpp/2026-03-21-introduce-jekyll.md`, 那链接就是:
[基于Jekyll的静态GitHub博客搭建]({% link _posts/cpp/2026-03-21-introduce-jekyll.md) %})

04/07/2026 补充:其实不难发现,写一个博客需要每次写一些重复的,尤其是时间, 写起来比较麻烦, 为了解决这个问题,我使用了一些脚本来简化:
比如我在_posts/cpp目录下写文章,进入博客根目录(rockosdev.github.io)下使用./cpp.sh "文章标题", 它就会在_posts/cpp目录下生成当前时间-文章标题的.md,并且进入_posts/cpp, 用起来比较方便。如果你没有写文章标题,它会提示你写了文章标题之后才会创建文章,否则只给提示作用。

rock@192:~/rockosdev.github.io$ ./cpp.sh
用法: ./cpp.sh "文章标题"

image

如果我们添加了标题,比如"第一篇博客",它就会按照当前的时间在_posts/cpp目录下正确格式生产的文章,并且把文该时间自己写上,不用自己去填写了, 但是要注意文件名称的标题部分的引号是英文环境,不是中文环境(推荐文件名写成英文)。

rock@192:~/rockosdev.github.io$ ./cpp.sh "第一篇博客"
✅ 创建: /home/rock/rockosdev.github.io/_posts/cpp/2026-04-07-第一篇博客.md
rock@192:~/rockosdev.github.io/_posts/cpp$ 
rock@192:~/rockosdev.github.io/_posts/cpp$ cat 2026-04-07-第一篇博客.md
---
title:              "第一篇博客"
date:               2026-04-07 10:48:06
last_modified_at:   2026-04-07 10:48:06
toc:                true
categories:         [Cpp]
tags:               [cpp]
---

正文从这里开始
rock@192:~/rockosdev.github.io/_posts/cpp$ 

这个脚本是cpp.sh, 将下列代码复制到cpp.sh里面,然后授权chmod +x cpp.sh
cpp.sh

#!/bin/bash

[ -z "$1" ] && { echo "用法: $0 \"标题\""; exit 1; }

TITLE="$1"

# 只替换空格为横线,保留所有其他字符(包括中文)
SLUG=$(echo "$TITLE" | sed 's/ /-/g' | sed 's/[\/\\:*?"<>|]//g')

# 如果处理后为空,用时间戳
[ -z "$SLUG" ] && SLUG="post-$(date +%s)"

DATE=$(date +%Y-%m-%d)
TIME=$(date +%H:%M:%S)
FILE="_posts/cpp/${DATE}-${SLUG}.md"
mkdir -p "_posts/cpp"

{
    echo "---"
    echo "title:              \"${TITLE}\""
    echo "date:               ${DATE} ${TIME}"
    echo "last_modified_at:   ${DATE} ${TIME}"
    echo "toc:                true"
    echo "categories:         [Cpp]"
    echo "tags:               [cpp]"
    echo "---"
    echo ""
    echo "正文从这里开始"
} > "$FILE"

echo "✅ 创建: $(pwd)/$FILE"
cd "_posts/cpp" && exec bash

我把update.sh放在_posts/cpp下面,如果要更新vim里面的当前编辑的cpp文件, 只需要执行:!update.sh %就行, 这样就会更新成最新的更新时间。

update.sh(将下列代码复制到update.sh里面,然后授权chmod +x update.sh)

#!/bin/bash

FILEPATH="${1:-}"

if [ -z "$FILEPATH" ]; then
    echo "❌ 需要文件路径"
    exit 1
fi

# 相对路径直接可用(因为脚本和文件同目录)
if [ ! -f "$FILEPATH" ]; then
    echo "❌ 文件不存在: $FILEPATH"
    exit 1
fi

NEW_DATE=$(date +%Y-%m-%d)
NEW_TIME=$(date +%H:%M:%S)

sed -i "s/last_modified_at:.*/last_modified_at:   ${NEW_DATE} ${NEW_TIME}/" "$FILEPATH"

echo "✅ 已更新: $FILEPATH"
echo "   last_modified_at: ${NEW_DATE} ${NEW_TIME}"

比如这篇文章last_modified_at是2026-03-21 04:05:00的, 而我该文章同级目录下有update.sh, 我们按下enter就会更新。
image
image
image


第五步:开启giscus评论区

giscus官网

5.1、准备 GitHub 仓库(rockosdev/rockosdev.github.io):

选择 Giscus 将连接的存储库。请确保:

  1. 该存储库是公开的,否则访问者将无法查看讨论内容。
  2. 必须安装giscus应用,否则访客将无法评论和互动。
  3. 启用该功能即可开启讨论功能

第一条前面已经设置(Public)。
第二条点击giscus, 选择下载install, 然后选择自己的GitHub账户,用密码登录一下即可完成。
第三条开启讨论功能

找到本库,设置(Setting)页面, 往下翻到Features,勾选Discussions, 然后set up discussions即可完成。
image
image
image

5.2、获取 giscus 配置代码
点击giscus
配置参数:

  • 仓库:输入 rockosdev/rockosdev.github.io(注意:不是 git 地址,是仓库路径)。
  • 页面 Discussion 映射关系:建议选择 Discussion 标题包含页面的 URL 或 pathname。
  • 分类:建议选择 Announcements 或 General(建议在仓库 Discussion 里先随便发个贴,这里就能选到了)。
  • 特性:根据喜好勾选(如:自适应主题、评论框在上等)。

image

获取代码:页面下方会生成一段 script 标签代码。复制它到一个临时的文件下, 方便后面对照配置_config.yml。
image

giscuss.html

<script src="https://giscus.app/client.js"
        data-repo="rockosdev/rockosdev.github.io"
        data-repo-id="R_kgDORW_znw"
        data-category="Announcements"
        data-category-id="DIC_kwDORW_zn84C3eZJ"
        data-mapping="pathname"
        data-strict="0"
        data-reactions-enabled="1"
        data-emit-metadata="0"
        data-input-position="bottom"
        data-theme="preferred_color_scheme"
        data-lang="en"
        crossorigin="anonymous"
        async>
</script>

5.3、集成到 Jekyll 博客

由于这个我们上面使用chirpy-starter库已经内置了giscuss, 只需在_config.yml里面对照着上面的giscuss.html简单设置一下就行。

# 打开_config.yml
~/rockosdev.github.io$ vim _config.yml

# 使用/giscuss点位到giscuss处,对照上面giscuss.html的填写, 然后保存, 然后同样部署到GitHub上。
~/rockosdev.github.io$ ./deploy.sh

原来的_config.yml
image
改动后的_config.yml
image

原来的博客评论区效果:
image
点击更新刷新一样,你就会发现一个新大陆:
image
改动后的博客评论区效果:
image
但是现在还不能马上评论,得点击下面的Sign in with Github, 然后授权(Authorize giscuss)一下,就可以评论了。

快来和我一起互动吧!
image

posted @ 2026-02-24 11:33  游翔  阅读(18)  评论(0)    收藏  举报