GitHub 使用
# GitHub
# 介绍
- 全球最大的代码托管平台,也是一个社区
- 也可以托管 Gist 代码片段
- 团队协作开发平台:有完善的协作功能 (Fork, Issue, Pull Request) 等功能
- 提供免费的静态网站托管服务 GitHub Pages
- GitHub 每个仓库的总体积限制是 1GB(Gitee 是 500MB),每个仓库中每个 release 的最大文件体积限制是 2GB(Gitee 是 1GB);release 数量没有明确的限制;对于普通用户,仓库(Repo 代码 + release 文件)的总体积限制为 100 GB
# 参考资料
- GitHub 简易指南 - OrangeX4's Blog (opens new window)
- Git/GitHub 基础介绍:lec2.md (opens new window)
- GitHub - tiimgreen/github-cheat-sheet: A list of cool features of Git and GitHub. (opens new window)
- GitHub - phodal/github: GitHub 漫游指南- a Chinese ebook on how to build a good project on Github. Explore the users' behavior. Find some thing interest. (opens new window)
# 使用
# 工具
- 汉化插件:GitHub - maboloshi/github-chinese: GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) (opens new window)
- 命令行版本的 GitHub dashboard:GitHub - dlvhdr/gh-dash: A beautiful CLI dashboard for GitHub 🚀 (opens new window)
- 管理 GitHub Stars(以下两个项目均会获取 GitHub public data)
- 显示/自定义 GitHub 通知:
- 生成 changelog:GitHub - github-changelog-generator/github-changelog-generator: Automatically generate change log from your tags, issues, labels and pull requests on GitHub. (opens new window)
# GitHub Markdown
生成 TOC:
- GitHub - ekalinin/github-markdown-toc: Easy TOC creation for GitHub README.md (opens new window)
- GitHub - ekalinin/github-markdown-toc.go: Easy TOC creation for GitHub README.md (in go) (opens new window)
alert 语法
> [!NOTE]
> [!TIP]
> [!IMPORTANT]
> [!WARNING]
> [!CAUTION]
# GitHub 基本使用
Repo 页面
Issues 页面
Pull requests 页面(简称 PR)
Pull Requests 流程:
- Fork 该 Repo;
- git clone fork 的 Repo 到本地,进行代码修改并提交,会出现提交的 commit 相对原 Repo 的前后关系;
- 点击 “Contribute”,提 一个 Pull Request 给原来的 Repo;
- 点击 “Sync fork”,同步原 Repo 最新代码。
改变 Repo 的 public private 属性:该 Repo 的 Settings - Danger Zone
设置自己的 activity 为 private:Settings - Public profile - Contributions & activity
# GitHub Pages
GitHub Pages:GitHub 提供的免费静态网页托管服务,类似的还有 Gitee Pages 和 GitLab Pages;商用:Vercel、Netlify 等
GitHub 会为每个用户/组织分配一个二级域名
username.github.io
创建一个名为
username.github.io
的 repo,会作为主页,通过username.github.io
即可访问 repo 内存放的静态网页对于其他 repo(可无限创建),也可以开启 Pages 功能,通过
username.github.io/repo-name
访问,静态页面来源也需要指定Vercel 部署:
- GitHub - Settings - Integrations - Applicaitons - 配置 Vercel,Repository access,在 Only select repositories 选择 5 个 repo
- GitHub 登录 Vercel (opens new window) - 首页 - New project - Import Git Repository - Deploy
- 点击 Goto Dashboard 来到项目主页,选择顶部的 Settings,在 Project Name 中更改网站名称
Netlify 部署:
- GitHub 登录 Netlify (opens new window)- 首页 - Add new site 中的 Import an existing project,点击 GitHub,与 GitHub 关联,选择仓库 Deploy - 项目主页,选择 Site settings,点击 Change site name 更改网站名称
# GitHub 个人首页
美化 GitHub profile 教程:GitHub - rzashakeri/beautify-github-profile (opens new window)
创建名为 username 的 repo,在 README.md 文档中添加内容即可生成个人首页(profile),可以添加 GitHub 统计信息以丰富并自定义 profile。
可获取动态生成的 GitHub 统计信息的 repo:
- GitHub - anuraghazra/github-readme-stats (opens new window)
- GitHub - lowlighter/metrics (opens new window)(形式丰富,可使用 GitHub Actions)
- GitHub - jstrieb/github-stats (opens new window)
- GitHub - vn7n24fzkq/github-profile-summary-cards (opens new window)
使用 github-readme-stats repo 部署的 vercel app API 会有次数限制,且只能访问公开 repo 的相关数据,导致统计信息不全。因此更建议 fork 该 repo,部署自己的 vercel app API(可以访问私有 repo 数据,参见 deploy-on-your-own (opens new window);添加 PAT_1 环境变量时,注意需点击 Save 保存)
github-stats repo:使用 Github Acitons 生成 GitHub 统计信息卡片(生成速度较慢);克隆该 repo,删除 .git
,创建自己的 repo(非 fork),根据需要添加 EXCLUDED、EXCLUDED_LANGS 和 EXCLUDE_FORKED_REPOS secrets(创建这些 secrets 的方法:进入该 repo 的设置页面中的 “Secrets” 部分,创建新 secret)
profile 实例参考:
- GitHub - TonyCrane/TonyCrane (opens new window)
- sudoskys (Jasmine) · GitHub (opens new window)
- XYCode-Kerman (XYCode Kerman) · GitHub (opens new window)
- GitHub - Wybxc/metrics: 忘忧北萱草大合集! (opens new window)
标准 README.md 文件写法:GitHub - RichardLitt/standard-readme: A standard style for README files (opens new window)
GitHub star history:GitHub Star History (opens new window)
< img alt="Star History" loading="lazy" src="https://api.star-history.com/svg?repos=SamirPaulb/DSAlgo&type=Date">
GitHub contribution 可视化:
- GitHub - yoshi389111/github-profile-3d-contrib: This GitHub Action creates a GitHub contribution calendar on a 3D profile image. (opens new window)
- Leticia-maria/.github/workflows/profile-3d.yml at main · Leticia-maria/Leticia-maria · GitHub (opens new window)
- 贪吃蛇(只能使用 public contributions,见 Issue #88 (opens new window)):snk (opens new window)
- (未测试)GitHub - jasineri/gitartwork: Gitartwork on user's contribution graph (opens new window)
# 徽章
通常在 GitHub 的 README 文件或其他在线文档中显示以展示各种信息,如构建状态、测试覆盖率、包版本、许可证信息等。
徽章/ icon 相关 repo:
- GitHub - badges/shields (opens new window)
- GitHub - inttter/md-badges: An extensive list of Shields.io badges. (opens new window)
- GitHub - ziadOUA/m3-Markdown-Badges: 🏅 A Material You inspired markdown badge collection. (opens new window)
- skill 图标 icon:GitHub - tandpfun/skill-icons: Showcase your skills on your Github readme or resumé with ease ✨ (opens new window)
Python 相关(使用 pypi)
<!-- package 版本 -->
![PyPi](https://img.shields.io/pypi/v/spt?logo=pypi&logoColor=white&label=PyPI)
<!-- package 下载量 -->
![PyPI Downloads](https://img.shields.io/pypi/dm/spt?logo=pypi&logoColor=white&color=blue&label=PyPI%20downloads)
<!-- Python 版本 -->
![Requires Python 3.6+](https://img.shields.io/badge/Python-3.6+-blue.svg?logo=python&logoColor=white)
<!-- package wheel -->
![PyPI - Wheel](https://img.shields.io/pypi/wheel/spt)
GitHub Repo 相关(使用 github)
<!-- star 数目 -->
![GitHub Repo stars](https://img.shields.io/github/stars/Bit-Part-Young/spt)
<!-- license 证书 -->
[![GitHub](https://img.shields.io/github/license/jzhang-github/PyFunction)](https://github.com/jzhang-github/PyFunction/blob/main/LICENSE)
<!-- 点击量 -->
![Hits-of-Code](https://hitsofcode.com/github/Bit-Part-Young/spt?branch=master)
<!-- CI 状态 方式 1 -->
![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/Bit-Part-Young/github-stats/main.yml)
<!-- 方式 2 -->
![Generate Stats Images - passing](https://github.com/Bit-Part-Young/github-stats/actions/workflows/main.yml/badge.svg)
编程语言 logo(使用 badge)
![Python](https://img.shields.io/badge/-Python-3776ab?style=flat-square&logo=python&logoColor=fff)
![Shell](https://img.shields.io/badge/-Shell-4eaa25?style=flat-square&logo=gnu%20bash&logoColor=fff)
![C++](https://img.shields.io/badge/-C%2b%2b-00599c?style=flat-square&logo=C%2b%2b&logoColor=fff)
![Fortran](https://img.shields.io/badge/-Fortran-734f96?style=flat-square&logo=fortran&logoColor=fff)
![Julia](https://img.shields.io/badge/-Julia-9558b2?style=flat-square&logo=julia&logoColor=fff)
![LaTeX](https://img.shields.io/badge/-LaTeX-008080?style=flat-square&logo=latex&logoColor=fff)
# pre-commit
pre-commit (opens new window):用于管理和维护 git 钩子的框架。允许配置多种钩子,这些钩子会在代码提交到仓库之前自动运行,以检查代码风格、格式化代码、检查语法错误(可用于 Python、Markdown、Shell)等。配置文件:.pre-commit-config.yaml
# 安装
pip install -U pre-commit
# 安装钩子
pre-commit install
# 手动运行钩子
pre-commit run
pre-commit run --all-files
格式:
repos:
- repo: # 钩子 repo url
rev: # 版本
hooks: # 列出要使用的具体钩子
- id: # 钩子唯一标识
args: # 可选 传递给钩子的额外参数
language_version: # 编程语言版本 如 python3.11
示例:.pre-commit-config.yaml (opens new window)
exclude: '.git|.tox'
default_stages: [commit]
fail_fast: true
repos:
- repo: https://github.com/psf/black-pre-commit-mirror
rev: 24.4.2
hooks:
- id: black # black-jupyter
# language_version: python3.11
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.2
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
types_or: [ python, pyi, jupyter ]
# Run the formatter.
- id: ruff-format
types_or: [ python, pyi, jupyter ]
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
name: isort (python)
args:
- --profile=black
# GitHub Actions
- GitHub 提供的 CI/CD 服务:CI(Continuous Integration):持续集成;CD(Continuous Delivery):持续交付
- 即配置一些自动化任务,在特定事件发生时自动执行:如每次 push 后自动测试,release 时自动构建部署
- 配置文件:
.github/workflows/workflow_name.yml
;可以有多个.yml
文件
参考资料:
- github自动化 - 我是谁 (opens new window)
- 使用 Github Action 自动部署 - 安知鱼 (opens new window)
- GitHub Actions 入门教程 - 阮一峰的网络日志 (opens new window)
- GitHub Actions工作流自动化的入门核心_哔哩哔哩_bilibili (opens new window)
具体示例:
- 同步到 Gitee:gitee.yml (opens new window)、hub-mirror-action (opens new window)
- 自动发布 Release:release.yml (opens new window)
# GitHub CLI
GitHub - cli/cli: GitHub’s official command line tool (opens new window)
- 安装
sudo apt install gh # Ubuntu
sudo pacman -S github-cli # Arch Linux
brew install gh # Mac
conda install gh --channel conda-forge # Conda
- 源码编译安装
# 安装 golang
curl -sS https://webi.sh/golang | sh
git clone https://github.com/cli/cli.git gh-cli
cd gh-cli
make install prefix=$HOME/src/gh
ln -s ~/src/gh/bin/gh ~/bin
- 验证登录:按照提示进行
gh auth login
- 创建 release 并上传文件:file 格式可以是压缩文件,
pdf
,md
等,txt
不行
gh release create v0.0.1 # 创建 release
gh release upload v0.0.1 file # 上传附加文件
gh release list # 列出 releases
- 创建 issue
gh issue create --title "gh issue test" --body "create an issue by gh"
- GitHub Copilot CLI 使用(效果一般)
# 安装
gh extension install github/gh-copilot
gh copilot explain # 解释
gh copilot suggest # 建议
# 设置别名 ghcs 和 ghce
echo 'eval "$(gh copilot alias -- zsh)"' >> ~/.zshrc
# 相关问题
- [x] 之前留言过的 GitHub issue,仍会收到后续通知, 如何关闭(在 GitHub 个人主页的 Notifications 处关闭)