每个GitHub仓库都可以拥有(或者成为)一个GitHub Pages网站,可以使用Jekyll构建。每次推送新提交时,GitHub都会构建该网站。
是否有一种方法可以在不推送新提交的情况下强制刷新Github Pages网站?
每个GitHub仓库都可以拥有(或者成为)一个GitHub Pages网站,可以使用Jekyll构建。每次推送新提交时,GitHub都会构建该网站。
是否有一种方法可以在不推送新提交的情况下强制刷新Github Pages网站?
来自GitHub支持,2014-06-07:
目前尚不能手动触发重建,除非将提交推送到相应的分支。
如评论中Andy所指出的那样,您可以使用以下命令推送空提交:
git commit -m 'rebuild pages' --allow-empty
git push origin <branch-name>
由于 GitHub Actions 的支持,触发每日发布变得相当容易:https://dev59.com/82Af5IYBdhLWcg3w9mps#61706020。
git log
- nilon如果您需要快速的脚本解决方案,请看这里。只需完成以下任务一次,然后在想要重建GitHub页面时运行脚本即可。
设置 > 开发者设置 > 个人访问令牌 > 生成新令牌
。repo
范围。创建名为RebuildPage.sh
的文件,并添加以下行:
#!/bin/bash
curl -u yourname:yourtoken -X POST https://api.github.com/repos/yourname/yourrepo/pages/builds
在此处:
yourname
替换为您的GitHub用户名。yourtoken
替换为您复制的个人访问令牌。yourrepo
替换为您的存储库名称。如果您使用Windows 10:
#!/bin/bash
)并将脚本另存为RebuildPage.bat
。(即,将脚本文件名中的.sh
替换为.bat
)上述步骤的替代方案:获取双击运行.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')\";"
现在,每当您想要重新构建GitHub页面时,双击该脚本即可。完成!
如果您使用Linux/Mac,则运行该脚本与运行其他脚本相同。完成!
此解决方案利用GitHub REST API v3的API。 这里 是该API的官方文档。
现在有了 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
Pages API: https://developer.github.com/v3/repos/pages/#request-a-page-build
我有一个问题困扰了我一段时间,即使将工作推送到主分支,也不会在myapp.github.io
上更改任何内容,原因有两个:
1 - 构建
无论我尝试多少次将我的工作推送到主分支,构建都不会启动。我通过修改Github在线编辑器中的文件来找到了解决方法(打开您的index.html并在Github网站上进行编辑,然后提交)。
2 - 缓存问题
即使成功构建后,在myapp.github.io
上仍会看到完全相同的页面,使用Ctrl + Shift + R
进行硬刷新也无法解决。如果使用Chrome浏览器,请检查您的页面,进入应用程序
选项卡,在左侧菜单中选择“清除存储”,并在菜单底部单击“清除站点数据”。
POST /repos/:owner/:repo/pages/builds
空提交对我不起作用,但基于@benett的回答,这个方法对我有用:
打开Postman,在此URL中创建一个新的请求:https://api.github.com/repos/[user_name]/[repo_name]/pages/builds (替换为您的用户名和仓库名),并选择POST方法。
在运行之前,转到 "header" 选项卡,并添加一个新的键 "Accept",其值为 "application/vnd.github.mister-fantastic-preview+json"。
现在可以运行它并再次访问您的页面。
{"message": "Not Found", "documentation_url": "https://developer.github.com/v3/repos/pages/#request-a-page-build"}
。也许是因为我的存储库是私有的? - Cobertoshttps://github.com/marketplace/actions/jekyll-update-github-pages-without-new-commit,这个操作可以在不生成新提交的情况下更新gh-pages。
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'
您可能会收到来自GitHub的电子邮件,告诉您在将其推送到gh-pages
时Jekyll未能成功构建您的网站。如果是这种情况,您可以尝试强制推送以触发另一个构建。
如果您使用了专用文件夹作为最终网站,比如一个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