如何强制构建 GitHub 页面?

每个 GitHub 仓库可以 (或者生存)一个 GitHub 页面网站,可以用 Jekyll 构建。GitHub 在您每次推送新提交时都会构建站点。
有没有一种方法可以强制刷新 Github 页面而不需要推送新的提交?

63237 次浏览

来自 GitHub 的支持,2014-06-07:

当前不可能手动触发重新构建,而不向适当的分支推送提交。


编辑:

正如 Andy 在评论中指出的,您可以使用以下命令推送一个空提交:

git commit -m 'rebuild pages' --allow-empty
git push origin <branch-name>

编辑2:

多亏了 GitHub Actions,触发日常发布变得相当容易: https://stackoverflow.com/a/61706020/4548500

我有这个问题一段时间了,并推到主分行没有改变 myapp.github.io的任何东西,原因有两个:

1-建造

无论我多少次试图把我的工作主人,建设不会开始。我通过在 Github 在线编辑器中修改我的文件找到了一个变通方法(打开 index.html 并在 Github 网站上编辑它,然后提交)

2-缓存问题

即使在一个成功的构建之后,我仍然可以在 myapp.github.io上看到完全相同的页面,用 Ctrl + Shift + R重新加载并不能解决这个问题。相反,如果使用 Chrome 浏览器,检查你的页面,进入 Application选项卡,在左侧菜单中选择“清除存储”,然后点击菜单底部的“清除网站数据”。

替代方案

您可能已经收到来自 GitHub 的电子邮件,告诉您 Jekyll 没有成功地构建您的站点,当您把它推到您的 gh-pages。如果是这种情况,您可以尝试强制 push 触发另一个构建。

如果您使用一个专用的文件夹为最终网站,让我们说一个 public文件夹,您可以尝试重建您的文件夹,并添加到您提交的更改文件夹。之后,您需要将这些文件分割到您的 gh-pages分支,并强制它们触发另一个构建,即使这些文件根本没有改变。以下代码的其余部分只是为了方便删除 public文件夹的提交,并将其从本地文件系统中删除。

密码

git add public
git commit -am ":bug: triggering another jekyll build"
git push origin $(git subtree split --prefix public master):gh-pages --force
git reset HEAD~1
rm -rf public

小费

如果有未提交的更改不属于最终站点的一部分,则可以使用以下命令隐藏它们。

git stash

然后执行上面的命令,手动强制构建 Jekyll 并卸载它们。

git stash pop

参考文献

这在 GitHub API < strike > 的 v3中是可行的,尽管它目前处于预览阶段 Https://developer.github.com/v3/repos/pages/#request-a-page-build

POST /repos/:owner/:repo/pages/builds

空白提交对我不起作用,但根据@benett 的回答,这对我起作用:

打开 Postman,用这个 URL 创建一个新请求: https://api.github.com/repos/[user_name]/[repo_name]/pages/builds(用您的名字和 repo 替换) ,并选择 POST 方法。

在运行它之前,转到 headers选项卡并添加一个值为 application/vnd.github.mister-fantastic-preview+json的新键 Accept

现在您可以运行它并再次访问您的页面。

如果您想要一个快速的脚本解决方案,这里是。只需执行下列任务一次,并在需要重新构建 GitHub 页面时运行该脚本。

1. 为命令行创建个人访问令牌:

  • 按照官方帮助 给你创建个人访问令牌。基本上,您必须登录您的 GitHub 帐户并转到: Settings > Developer settings > Personal access tokens > Generate new token
  • 勾选 repo显示器。
  • 收到令牌。

2. 创建以下脚本:

  • 创建一个名为 RebuildPage.sh的文件并添加以下行:

    #!/bin/bash
    curl -u yourname:yourtoken -X POST https://api.github.com/repos/yourname/yourrepo/pages/builds
    

    给你,

    • 用您的 GitHub 用户名替换 yourname
    • 用复制的个人访问令牌替换 yourtoken
    • 用存储库名称替换 yourrepo

3. 运行脚本:

  • 如果你使用 Windows10:

    • 您需要设置 用于 Linux 的 Windows 子系统(如果还没有完成的话)。请按照 这个进行设置。
    • 从脚本中删除第一行(#!/bin/bash)并将脚本保存为 RebuildPage.bat。(例如,在脚本文件名中用 .bat替换 .sh)
    • 替代上述要点: 为了获得运行 .sh文件的双击特性:

      • bash.exe设置为 .sh文件的默认程序。
      • 打开 regedit.exe并编辑 HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\command。将 (Default)值设置为:

        "C:\Windows\System32\bash.exe" -c " \"./$(grep -oE '[^\\]+$' <<< '%L')\";"
        
    • Now double-click the script wheneven you want to rebuild your GitHub page. Done!

  • If you use Linux/Mac, running the script is as same as running other scripts. Done!

Additional notes for the solution:

This solution utilizes a API of GitHub REST API v3. Here is the official documentation for the API.

即使在我将更改推送到 GitHub 存储库之后,我今天也无法看到更改。然后我检查了我的存储库设置以获取更多信息,在那里我可以看到,所有这些次构建都失败了,这就是我无法看到更改的原因。

enter image description here

您可能还会看到一条消息“您的站点在构建时遇到问题: 无法构建页面。请稍后再试。”

然后我检查了最近的提交,试图找出导致这个问题的原因。最后我解决了这个问题。

enter image description here

有一个 在标记(,)中添加逗号,导致了这个问题

enter image description here

如果您的。Md 档案。我建议您检查构建状态,如果面临同样的问题,则比较更改。

既然 GitHub Actions 已经可以使用了,那么这就变得微不足道了:

# File: .github/workflows/refresh.yml
name: Refresh


on:
schedule:
- cron:  '0 3 * * *' # Runs every day at 3am


jobs:
refresh:
runs-on: ubuntu-latest
steps:
- name: Trigger GitHub pages rebuild
run: |
curl --fail --request POST \
--url https://api.github.com/repos/$\{\{ github.repository }}/pages/builds \
--header "Authorization: Bearer $USER_TOKEN"
env:
# You must create a personal token with repo access as GitHub does
# not yet support server-to-server page builds.
USER_TOKEN: $\{\{ secrets.USER_TOKEN }}

这样做的回购样本: https://github.com/SUPERCILEX/personal-website/actions

页面 API: https://developer.github.com/v3/repos/pages/#request-a-page-build

即使我的 Github Actions 显示我的站点已经部署,我也很难刷新。

切换出版来源对我来说很有用。我把出版来源从母版切换到内容,然后再切换回母版。你可以检查 如何更改这里分公司的出版来源

我也经历过同样的问题,为了解决这个问题,我开发了一个 githu 操作,它可以与调度程序一起工作,并支持同时更新多个 gh 页面。

按照 https://github.com/marketplace/actions/jekyll-update-github-pages-without-new-commit ,操作更新 gh- 页面而不生成新的提交。

name: Update all github pages


on:
schedule:
- cron: "30 0 * * *"


jobs:
github-pages:
runs-on: ubuntu-latest
name: Update Github Pages Initiatives
steps:
- name: Jekyll update github pages without new commit
uses: DP6/jekyll-update-pages-action@v1.0.1
with:
DEPLOY_TOKEN: $\{\{ secrets.GH_PAGES_DEPLOY_TOKEN }}
USER: $\{\{ secrets.GH_PAGES_USER }}
FILTER:  'is%3Apublic%20org%3Adp6'

日志动作

我从其他答案推测这曾经很困难?

  1. 进入设置-> 页面
  2. 就在“ Change subject”下面,你会看到一个链接,指向实际的 Github 操作,标签是“ page build and loymentflow”。
  3. 单击“重新运行所有作业”