0. 背景
在 Ubuntu 上,使用仅有的 Git 命令直接发布 GitHub Release 是不行的,因为 Git 自身不支持与 GitHub Release API 的交互。然而可以在 Ubuntu 上安装并使用 GitHub CLI (gh) 工具,通过命令行来发布 Release。
1. 安装
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))
- 检查系统中是否已安装wget命令。type -p wget会返回wget的路径,如果已安装的话
bash
$ type -p wget
/usr/bin/wget
- 如果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
- 使用wget下载GitHub CLI的GPG密钥。-q使wget在安静模式下运行,不显示下载进度,O- 使输出直接传输到管道而不是文件。
- 通过管道 | 将下载的密钥传输给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
- 构建一个APT源字符串,其中包含用于安装GitHub CLI的软件包存储库的URL。[arch=$(dpkg --print-architecture)]动态地插入当前系统的架构。
bash
$ dpkg --print-architecture
amd64
- 将这个字符串写入/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
- 选择 GitHub.com 作为登录选项,并使用one-time code: 1FBF-CCA9 在浏览器进行验证
- 选择 HTTPS 作为 Git 操作的首选协议时,GitHub CLI 将自动存储 Git 凭据,并对询问是否要使用 GitHub 凭据向 Git 进行身份验证的提示回答"是"。 此操作非常有用,因为这允许直接使用 git push、git pull 等 Git 命令,无需设置单独的凭据管理器或使用 SSH。
2.2.2 创建 Release 使用以下命令创建一个新的 GitHub Release
- 使用 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'
- 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
- 创建 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