2023年最新 Github Pages 使用手册

news2024/11/18 1:33:55

参考:GitHub Pages 快速入门

1、什么是 Github Pages

GitHub Pages 是一项静态站点托管服务,它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件,(可选)通过构建过程运行文件,然后发布网站。 可以在 GitHub Pages 示例集合中看到 GitHub Pages 站点的示例。

1.1 站点类型

若要发布用户站点,必须创建个人帐户拥有的存储库,且存储库必须是公开的,私有不允许。 若要发布组织站点,必须创建组织帐户拥有的存储库。

除非使用的是自定义域,否则用户和组织站点在 http(s)://<username>.github.iohttp(s)://<organization>.github.io 中可用。项目站点的源文件与其项目存储在同一个仓库中

除非使用的是自定义域,否则项目站点在 http(s)://<username>.github.io/<repository>http(s)://<organization>.github.io/<repository> 中可用。

1.2 使用限制

  • GitHub Pages 源存储库的建议限制为 1 GB。 有关详细信息,请参阅“关于 GitHub 上的大文件”
  • 发布的 GitHub Pages 站点不得超过 1 GB。
  • 如果花费的时间超过 10 分钟,GitHub Pages 部署将超时。
  • GitHub Pages 站点的软带宽限制为每月 100 GB。
  • GitHub Pages 站点的软限制为每小时 10 次生成。 如果使用自定义 GitHub Actions 工作流生成和发布站点,则此限制不适用
  • 为了为所有 GitHub Pages 站点提供一致的服务质量,可能会实施速率限制。 这些速率限制无意干扰 GitHub Pages 的合法使用。 如果你的请求触发了速率限制,你将收到相应响应,其中包含 HTTP 状态代码 429 以及信息性 HTML 正文。

如果您的站点超出这些使用配额,我们可能无法为您的站点提供服务;或者您可能收到来自 GitHub 支持 的礼貌电子邮件,建议降低站点对服务器影响的策略,包括将第三方内容分发网络 (CDN) 置于您的站点前,利用其他 GitHub 功能(如发行版)或转用可能更符合您需求的其他托管服务。

1.3 数据收集

访问 GitHub Pages 站点时,出于安全目的,无论访问者是否已登录 GitHub ,都会记录并存储访问者的 IP 地址。 有关 GitHub 的安全做法的详细信息,请参阅 GitHub 隐私声明。

2、创建 GitHub Pages 站点

  1. 创建仓库,且仓库必须是公开的

  1. 本地新建项目、创建 index.html、index.css、index.js ,并配置如下

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="./index.css">
    </head>
    
    <body>
        <h1>Hello Github Pages</h1>
        <script src="./index.js"></script>
    </body>
    
    </html>
    
    h1 {
        color: red;
    }
    
    console.log("Hello Github Pages");
    
  2. 关联仓库,推送到 github

  1. 点击设置,再点击右边栏上的 Pages

  1. 设置 main 分支,root 根文件夹,并点击保存

  1. 可以看到 Actions 中已经在构建和部署页面了

  1. 构建完成后,重新回到 设置的Pages 页,可以看到多了如下的提示,点击查看即可

  1. 部署成功,展示如下:

3、删除站点

可通过两种方式删除站点:

  • 删除存储库。 有关详细信息,请参阅“删除仓库”。
  • 将源更改为 None 分支

4、取消/重新发布站点

取消发布站点时,当前部署将被删除,并且该站点将不再可用。 所有现有存储库设置或内容都不受影响。

取消发布站点

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在 GitHub Pages 下的“站点所在位置”消息旁,单击 ...

  3. 在显示的菜单中,选择“取消发布站点”。

重新发布站点:在 GitHub Actions 中重新点击构建发布

5、自定义404页面

可以有两个方式:

  • 仓库内创建 404.md,但是开头需要配置 yml 格式

    ---
    permalink: /404.html
    ---
    ...
    
  • 仓库内创建 404.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>404</title>
    </head>
    
    <body>
        <h3>404</h3>
    </body>
    
    </html>
    

6、配置发布源

发布源的方式有两种,一种是基于分支推送自动构建的方式,第二种的话是根据 Github Actions 做自动化构建

分支推送自动构建:可以选择推送的分支来进行触发,以及只能选择 / 根文件夹或者 docs 文件夹作为目录

如果选择了 docs 作为目录,如果不存在则会构建失败,并会收到提示邮件

Github Actions 自动化构建:优点在于不需要选择项目的静态目录,只需要使用在 工作流 中生成的工件去使用即可

7、Github Actions 自动化构建

  1. 使用 @mazp/create-tpl 创建 Vue3+TS 项目,用其他脚手架生成可以打包的项目也可以

  2. 创建仓库,且在 package.json 有 build 的 scripts

  1. 推送项目,开启 Github Pages 服务,并点击 create your own 按钮,github 会为我们自动初始化一个工作流

  1. 填写文件名,并进行提交:

  1. 查看 Actions,可以看到刚刚创建的 CI 工作流,并且会执行

  1. 使用 git pull 将创建好的工作流拉取下来,并进行如下修改:

    # 1 工作流名称
    name: CI
    
    # 2 工作流执行名称
    run-name: ${{ github.actor }} is update repo, start building...
    
    # 3 触发器
    on:
      # push 推送
      push:
        branches: ["main"]
      # PR 合并提交
      pull_request:
        branches: ["main"]
    
      # 允许您从“操作”选项卡手动运行此工作流
      workflow_dispatch:
    
    # 4 设置权限(文件是可以被读写修改的)
    permissions:
      contents: write
    
    # 工作1
    jobs:
      # 任务名称
      build:
        # 执行平台
        runs-on: ubuntu-latest
    
        # 任务步骤
        steps:
          # 1 将代码仓库的内容拉取(或称为检出)到工作目录中,以便在下面的工作流程中使用
          - name: Checkout code (检出代码)
            uses: actions/checkout@v3
          # 2 安装 node 环境,并设置版本为 16
          - name: Setup Node.js (设置 node 版本)
            uses: actions/setup-node@v3
            with:
              node-version: 16
          # 3 安装 pnpm
          - name: Install pnpm (安装 pnpm)
            uses: pnpm/action-setup@v2
            with:
              version: 7.0.0
          # 4 安装依赖
          - name: Install dependencies (安装依赖)
            run: pnpm install
    
          # 5 代码检查,无该命令所以不执行
          # - name: lint (代码检查)
          #   run: pnpm run lint
    
          # 6 跑测试,无该命令所以不执行
          # - name: Test (测试)
          #   run: pnpm run test
    
          # 7 构建项目
          - name: Build (构建)
            run: pnpm run build
          # 8 上传构建产物(actions/upload-artifact@v3 会上传工作流程中的文件,允许您在作业之间共享数据并在工作流程完成后存储数据)
          - name:  Upload build artifacts (上传构建产物)
            uses: actions/upload-pages-artifact@v2
            with:
              path: "./dist"
    
  2. 上传该文件,可以看到对应的工作流自动触发,并生成了 dist 的构建产物,但是目前还没有使用到该产物

  1. 添加部署的最后一个步骤

    ...
          # 9 部署 GitHub Pages
          - name: Deploy to GitHub Pages(部署到 GitHub Pages)
            uses: actions/deploy-pages@v2
            with:
              token: ${{ secrets.GITHUB_TOKEN }}
    
  2. 上传后,可以发现打包成功,并且正常部署了

    如果你的页面存在 404 的问题,在于打包的时候没有配置好资源基础路径,我的项目的话是在 Vite 配置文件中添加配置如下:

    export default defineConfig({
      mode: "development",
      // 与项目仓库名对应
      base: "/action-vue3/",
      // ...
    })
    

8、推送到指定分支进行 Pages 展示

把之前的第九步进行注释,添加新的部署操作:

      # ...
      # 9 部署 GitHub Pages
      # - name: Deploy to GitHub Pages(部署到 GitHub Pages)
      #   uses: actions/deploy-pages@v2
      #   with:
      #     token: ${{ secrets.GITHUB_TOKEN }}

      # 10 部署到 gh-pages分支
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist
          force_orphan: true

在首次自动构建完成后,会创建 gh-pages 分支:

接下去就需要我们将 Github pages 设置成 分支推送自动构建 模式,设置 gh-pages 分支推送的根目录文件夹,这样但 Github Actions 构建完成之后,会自动推送并覆盖该分支,从而正确部署项目

9、使用 Actions 缓存依赖

使用 Github Actions ,默认会为执行器安装 node 等最新环境,所以可以直接使用 node 以及 npm,如果需要指定版本,使用 actions/setup-node@v3 进行下载

在上述例子的基础上,修改 yml 文件,缓存 node_modules:

  • 使用上下文创建缓存键
  • 上下文可使用变量
  • 关于 GITHUB_TOKEN 机密
# 1 工作流名称
name: CI

# 2 工作流执行名称
run-name: ${{ github.actor }} is update repo, start building...

# 3 触发器
on:
  # push 推送
  push:
    branches: ["main"]
  # PR 合并提交
  pull_request:
    branches: ["main"]

  # 允许您从“操作”选项卡手动运行此工作流
  workflow_dispatch:

# 4 设置权限(文件是可以被读写修改的)
permissions:
  contents: write
  pages: write
  id-token: write

# 工作合集
jobs:
  # 1) 初始化
  setup:
    runs-on: ubuntu-latest
    steps:
      # 1 将代码仓库的内容拉取(或称为检出)到工作目录中,以便在下面的工作流程中使用
      - name: checkout
        uses: actions/checkout@v3

      # 2 读取缓存 node_modules
      - name: cache node_modules
        id: node_modules_cache_id
        uses: actions/cache@v3
        with:
          path: node_modules
          # hashFiles 可以根据文件哈希创建 key 值,当文件依赖发生变化时,重新存储缓存
          key: ${{ runner.os }}-${{ hashFiles('package.json') }}-node_modules

  # 2) 构建项目
  build:
    runs-on: ubuntu-latest
    needs: setup
    steps:
      # 1 将代码仓库的内容拉取(或称为检出)到工作目录中,以便在下面的工作流程中使用
      - name: checkout
        uses: actions/checkout@v3

      # 2 安装 node 环境,并设置版本为 16(不装默认会最新版本)
      - name: Setup Node.js (设置 node 版本)
        uses: actions/setup-node@v3
        with:
          node-version: 16

      # 3 安装检索依赖
      - name: Install dependencies (安装依赖)
        run: npm install

      # 4 如果变化重新设置缓存 node_modules
      - name: restore cache from node_modules
        id: node_modules_cache_id
        uses: actions/cache@v3
        with:
          path: node_modules
          key: ${{ runner.os }}-${{ hashFiles('package.json') }}-node_modules

      # 5 代码检查,无该命令所以不执行
      # - name: lint (代码检查)
      #   run: pnpm run lint

      # 6 跑测试,无该命令所以不执行
      # - name: Test (测试)
      #   run: pnpm run test

      # 7 构建项目
      - name: Build (构建)
        run: npm run build

      # 8 上传构建产物(actions/upload-artifact@v3 会上传工作流程中的文件,允许您在作业之间共享数据并在工作流程完成后存储数据)
      - name: Upload build artifacts (上传构建产物)
        uses: actions/upload-pages-artifact@v2
        with:
          path: "./dist"

  # 3) 部署项目
  deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
      # 1.1 部署 GitHub Pages
      # - name: Deploy to GitHub Pages(部署到 GitHub Pages)
      #   uses: actions/deploy-pages@v2
      #   with:
      #     token: ${{ secrets.GITHUB_TOKEN }}

      # 1.2 部署到 gh-pages分支
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist
          force_orphan: true

缓存成功可以看到:

关于上面的 Setup pnpm cache 步骤中,7 天内未被访问的任何缓存条目将会被删除。可以存储的缓存数没有限制,但存储库中所有缓存的总大小限制为 10 GB,更多内容请阅读 缓存依赖项以加快工作流程。

首次和二次使用后速度对比:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

执行jmeter端口不够用报错(Address not available)

执行jmeter端口不够用报错(Address not available) linux解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle 1// 启用套接字的重用 sudo sysctl -w net.ipv4.…

CRM系统如何定制?定制哪些功能?

虽然市场上有许多成熟的CRM系统供企业选择&#xff0c;但很多时候&#xff0c;现有的标准化CRM系统无法满足企业的特殊需求。这时就需要进行CRM系统定制。那么&#xff0c;什么时候需要CRM系统定制&#xff0c;CRM系统定制怎么弄&#xff1f;下面我们就说一说。 什么时候需要C…

【教程】超人RAR解密助手

通常压缩包设置了密码&#xff0c;当我们对压缩包进行操作的的时候都需要输入密码&#xff0c;比如解压文件、修改密码、删除密码等情况&#xff0c;但是忘记了压缩包密码之后都没有办法操作了。这种情况下我们需要先找回密码才能继续操作。 想要找回密码&#xff0c;我们可以…

根据源码,模拟实现 RabbitMQ - 网络通讯设计,实现客户端Connection、Channel(完结)

目录 一、客户端代码实现 1.1、需求分析 1.2、具体实现 1&#xff09;实现 ConnectionFactory 2&#xff09;实现 Connection 3&#xff09;实现 Channel 二、编写 Demo 2.1、实例 2.1、实例演示 一、客户端代码实现 1.1、需求分析 RabbitMQ 的客户端设定&#xff…

Jetpack Compose UI架构

Jetpack Compose UI架构 引言 Jetpack Compose是我职业生涯中最激动人心的事。它改变了我工作和问题思考的方式&#xff0c;引入了易用且灵活的工具&#xff0c;几乎可轻松实现各种功能。 早期在生产项目中尝试了Jetpack Compose后&#xff0c;我迅速着迷。尽管我已有使用Co…

margnalizeHuberJacibian测试Demo

文章目录 margnalize公式及原理&#xff1a;测试代码及运行结果解说代码编译命令&#xff1a;运行结果&#xff1a; Huber原理代码 Jacibian测试代码代码解释代码编译命令运行结果 margnalize 公式及原理&#xff1a; 测试代码及运行结果 解说 /***************************…

python 包管理工具poetry和异步sanic web框架实践+配置镜像源

上传源码到服务器&#xff0c;然后执行poetry install安装依赖。 多进程启动脚本run.sh内容&#xff1a; #!/bin/bash #应用入口文件 APP_NAME/www/wwwroot/python-sanic/main.py #进程关键字 PROCESS_KEYWORDpython-sanic #使用说明&#xff0c;用来提示输入参数 usage(){…

潮玩数藏App:数字时代下的潮流收藏新体验

随着数字时代的到来&#xff0c;潮流收藏成为了一种新型的文化现象&#xff0c;并在年轻人中迅速流行起来。为了满足这一需求&#xff0c;潮玩数藏App应运而生&#xff0c;为用户提供了一个专业、便捷的潮流收藏平台。本文将深入探讨潮玩数藏App的专业性、思考深度以及逻辑性&a…

“爱在七夕,情暖人间”店口志愿者开展敬老助残服务活动

在这个充满爱心的世界里&#xff0c;让志愿服务燃烧我们的人生。 8月22日七夕节&#xff0c;诸暨市爱心助残协会联合牛皋社区党支部、老年协会、店口镇义工协会、店口镇残疾人之家、诸暨凯客蛋糕、诸暨中康医院、杨琼发艺工作室、国芬理发店等爱心团队在店口残疾人之家开展了“…

好用的电容笔有哪些推荐?开学季便宜好用电容笔推荐

开学马上要来了&#xff0c;想必很多学生党都在为开学而做准备&#xff0c;要知道&#xff0c;原装的Apple Pencil&#xff0c;虽然功能很强&#xff0c;但是价格却很贵&#xff0c;不是一般人能够承受得起的。所以&#xff0c;是否也有类似于Apple Pencil这样的电容笔&#xf…

直播app源码,会话描述协议SDP:高质量平台

摘要&#xff1a; SDP协议又称为会话描述协议&#xff0c;在直播app源码平台中&#xff0c;通过定义实时通信参数&#xff0c;管理会话信息和媒体数据&#xff0c;来为用户提供实时通信服务&#xff0c;确保通信的质量与稳定&#xff0c;例如:在直播app源码平台的直播间中&…

每年节约3千万!微信实验平台Iceberg湖仓一体架构改造

# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第4期 | 黄延岩&#xff1a;微信实验平台 - 全面拥抱湖仓时代 微信实验平台简介 微信实验平台主要提供微信内部各个业务场景&#xff08;视频号、直播、搜一搜、公众号等&#xff09;下的各类实验场景的支持&…

苍穹外卖 day1 搭建成功环境

引入 idea找不到打包生成的文件目录怎么办&#xff0c;首先点击这个小齿轮 show ecluded files然后就能找到隐藏的文件 这个jar包内含tomcat&#xff0c;可以直接丢在linux上用 开发环境&#xff1a;开发人员在开发阶段使用的环境&#xff0c;一般外部用户无法访问 测试环…

清华源的链接太多老崩溃,我把它拷过来,需要什么点什么

建议按照字母分个类可能会好点 把链接这里改为 哈哈就不卡了&#xff0c;浏览器也不崩溃了还能很快就链接成功 Links for pandas这是链接 这个小技巧教给大家请给我点个赞

uniapp 实现切换tab锚点定位到指定位置

1.主要使用uniapp scroll-view 组件的scroll-into-view属性实现功能 2.代码如下 <scroll-view:scroll-into-view"intoView"><u-tabsclass"tabs-list"change"tabChange":list"tabList"></u-tabs><view id"1&…

Wireshark流量分析例题

目录 前言 一、题目一(1.pcap) 二、题目二(2.pcap) 三、题目三(3.pcap) 四、题目四(4.pcap) 前言 Wireshark流量包分析对于安全来说是很重要的&#xff0c;我们可以通过Wireshark来诊断网络问题&#xff0c;检测网络攻击、监控网络流量以及捕获恶意软件等等 接下来我们…

pyqt5-自定义停靠栏头部

import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import *class CustomDock(QDockWidget):def __init__(self, title: str, parentNone):super().__init__(title, parent)"""停靠栏的头部"""h_layout Q…

柔性数组详解

柔性数组 1.前言 在c99标准中&#xff1a;允许结构体的最后一个变量是未知大小的数组&#xff0c;这就是柔性数组的来源。 例如&#xff1a; typedef struct type_a{ int i;int a[0];//柔性数组成员 }type_a;有些编译器可能会报错&#xff0c;那就使用下面这一种定义方式&…

数据驱动洞察:各种词频分析技术挖掘热点数据

一、引言 随着信息时代的发展&#xff0c;人们的关注点日益复杂多样。社交媒体、新闻网站和论坛等平台上涌现了大量的信息&#xff0c;这使得热点分析成为了解社会热点话题和舆情动向的重要手段。词频统计是热点分析的基础&#xff0c;本文将分别介绍基于ElasticSearch、基于S…

C++动态规划经典案例解析之合并石子

1. 前言 区间类型问题&#xff0c;指求一个数列中某一段区间的值&#xff0c;包括求和、最值等简单或复杂问题。此类问题也适用于动态规划思想。 如前缀和就是极简单的区间问题。如有如下数组&#xff1a; int nums[]{3,1,7,9,12,78,32,5,10,11,21,32,45,22}现给定区间信息[…