双仓库分离法(源码仓库私有,编译仓库公开)

如果你希望使用 GitHub Pages 官方托管,或者强力要求 GitHub 上必须有一个公开的仓库用来“备份”或者展示你的纯静态 public 文件,你可以建立两个仓库

  • 仓库 A(blog-source:设置为 Private(私有)。里面存放你所有的 Hexo 源码(Markdown、think.ymlthemes/package.json)。
  • 仓库 B(blog-output:设置为 Public(公开)。里面最初什么都没有。

🛠️ 编写专用的 GitHub Actions 跨仓库推送脚本:

在你私有的 仓库 A 中,创建 .github/workflows/deploy.yml。我们需要利用一个支持跨仓库推送的 Action(使用 personal access token)把编译结果塞进 仓库 B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#YAML
name: Deploy Private Source to Public Repo

on:
push:
branches:
- main

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Source
uses: actions/checkout@v4
with:
submodules: true

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install & Generate
run: |
npm ci
npx hexo clean
npx hexo generate

# 关键步骤:使用专门的 Action 将生成的 public 目录跨仓库推送到你公开的仓库 B
- name: Deploy to Public Repo
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: public
repository-name: 你的用户名/blog-output # 改为你公开的静态仓库名字
branch: main # 推送到公开仓库的主分支
token: ${{ secrets.MY_PERSONAL_TOKEN }} # 见下方说明,需要配置一个具有写权限的个人 Token

🔑 关于 MY_PERSONAL_TOKEN 的配置: 因为是跨仓库推送,默认的 GITHUB_TOKEN 权限不够。你需要去 GitHub 账号的 Settings -> Developer Settings -> Personal Access Tokens (Tokens classic) 生成一个勾选了 repo 权限的 Token。然后把它复制到你私有源码仓库 ASettings -> Secrets and variables -> Actions 中,添加为一个名为 MY_PERSONAL_TOKEN 的加密变量。

生成 Token:

  • 点击你的 GitHub 头像 -> Settings -> 左侧最底部 Developer Settings -> Personal access tokens -> 选择 Tokens (classic)。

  • 点击 Generate new token (classic)。

  • Note 填:hexo-deploy-token。

    权限勾选:把 repo 这一大项完全勾选上(必须包含 repo:status, public_repo 等)。

  • 点击最下方 Generate token,复制生成出来的那串以 ghp_ 开头的长代码(注意:离开页面后它就再也看不到了)。

把 Token 塞进私有源码仓库:

  • 打开你的私有源码仓库 blog-source 的 GitHub 页面。

  • 点击顶部的 Settings -> 左侧菜单找到 Secrets and variables -> 点击 Actions。

  • 点击右侧的 New repository secret 按钮。

    Name 必须严格填写:MY_PERSONAL_TOKEN

    Secret/Value 粘贴:刚才复制的那串 ghp_… 代码。

  • 点击 Add secret 保存。