Ubuntu 20.04 安装 GitHub CLI(gh),并使用

0. 背景

在 Ubuntu 上,使用仅有的 Git 命令直接发布 GitHub Release 是不行的,因为 Git 自身不支持与 GitHub Release API 的交互。然而可以在 Ubuntu 上安装并使用 GitHub CLI (gh) 工具,通过命令行来发布 Release。

1. 安装

gh官网

bash 复制代码
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y

解释命令

1.1 (type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y))

  1. 检查系统中是否已安装wget命令。type -p wget会返回wget的路径,如果已安装的话
bash 复制代码
$ type -p wget
/usr/bin/wget
  1. 如果wget没有安装(即type -p wget的输出被重定向到/dev/null且不产生任何输出),则执行(sudo apt update && sudo apt-get install wget -y)。这会更新系统的包列表,然后安装wget。

1.2 sudo mkdir -p -m 755 /etc/apt/keyrings

创建一个目录**/etc/apt/keyrings**,用于存储APT软件包管理器的密钥。-m 755设置目录权限,使其对所有用户可读写

1.3 wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null

  1. 使用wget下载GitHub CLI的GPG密钥。-q使wget在安静模式下运行,不显示下载进度,O- 使输出直接传输到管道而不是文件。
  2. 通过管道 | 将下载的密钥传输给sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg,这会将密钥内容写入指定的文件。> /dev/null将tee命令的输出重定向到/dev/null,这样就不会在终端显示密钥内容。

1.4 sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg

改变密钥文件的权限,使其对组和其他用户可读

1.5 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null

  1. 构建一个APT源字符串,其中包含用于安装GitHub CLI的软件包存储库的URL。[arch=$(dpkg --print-architecture)]动态地插入当前系统的架构。
bash 复制代码
$ dpkg --print-architecture
amd64
  1. 将这个字符串写入/etc/apt/sources.list.d/github-cli.list文件,这样APT就可以从这个源安装软件包。> /dev/null将输出重定向到/dev/null,不显示在终端

1.6 sudo apt install gh -y

安装GitHub CLI,-y标志自动确认安装,无需手动输入。

2. gh 使用

官方使用手册

2.1 git 与 gh 区别

Git 命令行接口 (git) 允许使用本地或远程 Git 存储库。 远程存储库可以托管在 GitHub 上,也可以由另一个服务托管。

GitHub CLI (gh) 专为搭配使用 GitHub 而设计。 其允许使用命令行以各种方式与 GitHub 进行交互,如上一个列表所示。 如果倾向于使用命令行,用户可能更喜欢使用 GitHub CLI,而不是在浏览器中使用 GitHub。 GitHub CLI 还能让用户更轻松地创建脚本来自动执行 GitHub 操作。

2.2 使用

2.2.1 从终端运行这个命令向 GitHub 进行身份验证

bash 复制代码
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: 1FBF-CCA9
Press Enter to open github.com in your browser... 
Opening in existing browser session.
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as 6master6
  1. 选择 GitHub.com 作为登录选项,并使用one-time code: 1FBF-CCA9 在浏览器进行验证
  2. 选择 HTTPS 作为 Git 操作的首选协议时,GitHub CLI 将自动存储 Git 凭据,并对询问是否要使用 GitHub 凭据向 Git 进行身份验证的提示回答"是"。 此操作非常有用,因为这允许直接使用 git push、git pull 等 Git 命令,无需设置单独的凭据管理器或使用 SSH。

2.2.2 创建 Release 使用以下命令创建一个新的 GitHub Release

  1. 使用 gh auth status 命令检查你的 GitHub CLI 登录状态
bash 复制代码
$ gh auth status
github.com
  ✓ Logged in to github.com account 6master6 (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'
  1. gh repo view --web 来查看仓库的详细信息,并确保你有足够的权限
bash 复制代码
$ gh repo view --web
Opening github.com/DjangoPeng/GitHubSentinel in your browser.

查看自己的仓库

bash 复制代码
$ gh repo view 6master6/GitHubSentinel
6master6/GitHubSentinel
GitHub Sentinel is an open-source AI Agent designed to enhance collaboration and project management for developers and project managers. It automates the retrieval and aggregation of updates from subscribed GitHub repositories on a regular basis (daily/weekly), ensuring you stay informed of the latest changes.


   GitHubSentinel                                                                                                     
                                                                                                                      
  GitHub Sentinel is an open-source AI Agent designed to enhance collaboration and project management for developers  
  and project managers. It automates the retrieval and aggregation of updates from subscribed GitHub repositories on a
  regular basis (daily/weekly), ensuring you stay informed of the latest changes.                                     



View this repository on GitHub: https://github.com/6master6/GitHubSentinel
  1. 创建 Release
    使用 gh release create 命令来创建一个新的 Release。如果你已经在仓库的本地克隆目录中,可以直接运行以下命令
bash 复制代码
gh release create v0.0.1 --title "v0.0.1" --notes "Initial release of GitHub Sentinel"

如果你不在仓库的本地目录中,你需要指定仓库的完整路径,格式为 /,例如:

bash 复制代码
gh release create 6master6/GitHubSentinel v0.0.1 --title "v0.0.1" --notes "### Release Notes for v0.0.1

- Initial release with basic functionality
  - Subscription management
  - Update retrieval from GitHub repositories
  - Notification system
  - Report generation
"

然后

bash 复制代码
git push origin main --tags
相关推荐
pk_xz12345620 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强23 分钟前
Linux之sed命令详解
linux·运维·服务器
小牛itbull1 小时前
ReactPress:重塑内容管理的未来
react.js·github·reactpress
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
dsywws7 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零8 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程9 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法