2023年最新 Github Pages 使用手册

参考: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,更多内容请阅读 缓存依赖项以加快工作流程。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tensordataset 和dataloader取值

测试1 from torch.utils.data import TensorDataset,DataLoader import numpy as np import torch a np.array([[1,2,3],[2,3,3],[1,1,2],[10,10,10],[100,200,200],[-1,-2,-3]]) print(a)X torch.FloatTensor(a) print(X)dataset TensorDataset(X,X)测试2 from torch.uti…

Java接收json参数

JSON 并不是唯一能够实现在互联网中传输数据的方式&#xff0c;除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务&#xff0c;那么我们为什么要使用 JSON&#xff0c;而不是 XML 呢&#xff1f; 之所以使用 JSON&#xff0c;最主要的原因是 JavaScript。众所周知…

vscode流程图插件使用

vscode流程图插件使用 1.在vscode中点击左下角设置然后选择扩展。 2.在扩展中搜索Draw.io Integration&#xff0c;安装上面第一个插件。 3.安装插件后在工程中创建一个后缀为drawio的文件并且双击打开即可绘制流程图

SpringBoot项目在启动后自动关闭

问题描述&#xff1a; 今天搭建了一个SpringBoot项目&#xff0c;但是在启动之后就自行关闭了&#xff0c;就像下面这样&#xff1a; 原因分析&#xff1a;在创建SpringBoot项目的时候&#xff0c;Web的依赖没有导入&#xff0c;默认以普通java项目运行导致的终止。 解决方案…

比较重合点的排斥能

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A中有2个1&#xff0c;B中有1个1&#xff0c;有一个点重合&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 得到数据 构造平均列A 构造平均列…

【GoLang】go入门:go语言执行过程分析 常见数据类型(基本数据类型)

1、go语言执行过程分析 【1】执行流程分析 通过 go build 进行编译 运行上一步生成的可执行文件 通过 go run 命令直接运行 【2】上述两种执行流程的区别 在编译时&#xff0c;编译器会将程序运行时依赖的库文件包含在可执行文件中&#xff0c;所以可执行文件会变大很多通过g…

Git入门

本文主要介绍Git的入门知识。首先讲述版本控制工具的一些背景&#xff0c; 然后介绍如何在你自己的系统上安装.配置和运行Git。学完本文,你将明白Git是怎么来的、为什么需要Git,并掌握使用Git的基础知识。 一、版本控制 什么是“版本控制”&#xff0c;为什么需要它?版本控制是…

Python OCR 使用easyocr库将图片中的文章提取出来

Python OCR 使用easyocr库将图片中的文章提取出来 初环境内容步骤一&#xff1a;安装easyocr库步骤二&#xff1a;导入必要的库步骤三&#xff1a;创建OCR阅读器对象步骤四&#xff1a;指定要识别的图片路径步骤五&#xff1a;执行OCR识别并提取文章内容步骤六&#xff1a;遍历…

Docker consul的容器服务注册与发现

前言一、服务注册与发现二、consul 介绍三、consul 部署3.1 consul服务器3.1.1 建立 Consul 服务3.1.2 查看集群信息3.1.3 通过 http api 获取集群信息 3.2 registrator服务器3.2.1 安装 Gliderlabs/Registrator3.2.2 测试服务发现功能是否正常3.2.3 验证 http 和 nginx 服务是…

Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】

题目 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …

Vue2向Vue3过度Vue3状态管理工具Pinia

目录 1. 什么是Pinia2. 手动添加Pinia到Vue项目3. Pinia基础使用4. getters实现5. action异步实现6. storeToRefs工具函数7. Pinia的调试8. Pinia持久化插件 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到…

【Java】树结构SQL数据的如何去实现搜索

这里写自定义目录标题 需要实现的效果前端需要的json格式&#xff1a;一定是一个完整的树结构错误错误的返回格式错误的返回格式实现的效果 正确正确的返回格式正确的展示画面 后端逻辑分析代码总览 数据库表结构 需要实现的效果 前端需要的json格式&#xff1a;一定是一个完整…

【算法】倍增-ST表

一.倍增 倍增是一种常用的算法技巧&#xff0c;通常用于优化时间复杂度。它的核心思想是将原问题分解成若干个规模较小的子问题&#xff0c;通过对子问题的求解来得到原问题的解。具体来说&#xff0c;倍增算法通常采用二分思想&#xff0c;将问题规模不断缩小&#xff0c;直到…

C#获取DataTable的前N行数据然后按指定字段排序

获取DataTable的前N行数据然后按指定字段排序 可以使用以下三种代码&#xff1a; 第一种&#xff1a;使用Linq DataTable dtLast dataTable.AsEnumerable().Take(count).OrderBy(dataRow > Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable(); 第二种…

【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)

使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_…

stm32之9.中断优先级配置

主函数main.c #include <stm32f4xx.h> #include "led.h" #include "key.h"#define PAin(n) (*(volatile uint32_t *)(0x42000000 (GPIOA_BASE0x10-0x40000000)*32 (n)*4)) #define PEin(n) (*(volatile uint32_t *)(0x42000000 (GP…

OpenCV基础知识(8)— 图形检测

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。图形检测是计算机视觉的一项重要功能。通过图形检测可以分析图像中可能存在的形状&#xff0c;然后对这些形状进行描绘&#xff0c;例如搜索并绘制图像的边缘&#xff0c;定位图像的位置&#xff0c;判断图像中有没有直线、…

【Terraform学习】使用 Terraform 创建Amazon VPC(Terraform-AWS最佳实战学习)

使用 Terraform 创建Amazon VPC 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_vpc 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secret_key和 区域变量…

Vue3 中引入液晶数字字体(通常用于大屏设计)

一、下载 .ttf 字体文件到本地&#xff0c;放在 src 中的 assets 文件下 下载液晶字体 DS-Digital.ttf 二、在 css 文件中引入字体 /* src/assets/fonts/dsfont.css */ font-face {font-family: electronicFont;src: url(./DS-Digital.ttf);font-weight: normal;font-styl…

计算机毕业设计 志愿者服务系统 微信小程序设计与开发

本课题要求实现一套微信小程序志愿者服务管理&#xff0c;系统主要包括&#xff08;管理员&#xff0c;志愿者和团体管理者&#xff09;三个模块等功能。 。系统选用java语言&#xff0c;应用ssm框架&#xff0c; MySQL为后台数据库。系统主要包括首页、个人中心、志愿者管理、…