❤️💕💕CS自学指南,大学教育无论是深度还是广度都没有办法支撑我们的职业素养,这个板块算是自己在CS学习中额外补充和记录的。个人博客:http://nsddd.top
[TOC]
[[Github CLI]] 是一个非常好用的命令行工具,可以让开发者通过命令行于 GitHub 进行无缝的协同工作,也就是我们直接在命令行终端上就可以进行 pull requests、issues 等其他功能。
基于我目前处于 2.0 版本,主要介绍 2.0 的使用:
C:\Users\smile>gh version
gh version 2.20.0 (2022-11-08)
https://github.com/cli/cli/releases/tag/v2.20.0
GitHub CLI 2.0 支持扩展,允许任何人创建基于 GitHub CLI 核心功能的自定义命令。
我们使用GitHub CLI 1.0的目标是构建令人惊叹的工具,使您能够更无缝地端到端地在终端中完成最常见的开发人员工作流程。我们继续在此基础上构建,为脚本编写和使用GitHub Actions提供更好的支持。但我们知道,一种放之四海而皆准的工具永远无法满足每个开发人员的需求。
🤔不仅如此,我们在 github 中也可以发现,GitHub CLI 是用 Go语言写的一个命令行工具,目前的贡献者已经快达到 400 人,甚至对于我们来说,这也是一个很好的学习机会,我们可以对此进行 PR 。
GitHub仓库中有详细的 🖱️安装信息
由于本身已经使用 windown 安装过,接下来使用 Linux 记录测试并且记录安装过程🖊️
我选择使用 二进制进行安装,这样的在Linux环境中是通用的,版本是:https://github.com/cli/cli/releases/download/v2.22.0/gh_2.22.0_linux_386.tar.gz
安装完成后直接在命令行中执行 gh
命令,看到如下所示的信息就证明已经安装完成:
使用命令登陆:
C:\Users\smile>gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? 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: CC38-2C29
Press Enter to open github.com in your browser...
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as cubxxw
网页端验证即可:
选择 token 方式登陆验证,GitHub创建token,粘贴即可:
root@cubmaster01:~/workspces/sealer# gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: ****************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as cubxxw
开始在命令行中使用 GitHub。 例如,使用 gh issue status
或 gh issue list --assignee @me
查找要处理的问题。 使用 gh pr create
创建拉取请求。 使用 gh pr checkout
、gh pr diff
和 gh pr review
查看拉取请求。
gh repo
命令是 GitHub CLI 的一部分,它可以帮助你在命令行中管理 GitHub 仓库。
具体而言,gh repo
命令包括以下子命令:
gh repo clone
: 克隆一个存储库到本地gh repo create
: 创建一个新的存储库gh repo fork
: 将一个存储库复制到自己的账户下gh repo list
: 列出自己的所有存储库gh repo set-default
: 设置默认的存储库gh repo view
: 查看存储库的详细信息
gh repo set-default
命令是 GitHub CLI 的一部分,它可以帮助你设置默认的远程存储库。这样,在使用 GitHub CLI 的其他命令时,就可以省略存储库的名称。
命令格式:
gh repo set-default [OWNER]/[REPO]
其中,OWNER 是存储库所有者的用户名,REPO 是存储库名称。
💡简单的一个案例如下:
[root@dev sealos]# gh repo set-default
This command sets the default remote repository to use when querying the
GitHub API for the locally cloned repository.
gh uses the default repository for things like:
- viewing and creating pull requests
- viewing and creating issues
- viewing and creating releases
- working with Actions
- adding repository and environment secrets
? Which repository should be the default? cubxxw/sealos
✓ Set cubxxw/sealos as the default repository for the current directory
smile@DESKTOP-N9GOOM4 MINGW64 /d/文档/git
$ gh repo clone cubxxw/cubxxw
Cloning into 'cubxxw'...
remote: Enumerating objects: 1755, done.
remote: Counting objects: 100% (1755/1755), done.
remote: Compressing objects: 100% (565/565), done.
如果是自己的仓库可以省略 用户名 cubxxw
我们可以使用 gh
命令来过滤 issue,比如过滤带有 gitment
标签的问题:
gh repo view
命令
gh repo view [OWNER]/[REPO]
'gh repo view' 命令可以帮助你查看存储库的详细信息。 你可以使用这个命令来查看诸如存储库名称、描述、语言、活跃度、贡献者等信息。
如果不加
[OWNER]/[REPO]
,那么默认选中的是当前所在目录的 README 文件。
💡简单的一个案例如下:
gh repo view cubxxw/cubxxw
gh issue
命令是 GitHub CLI 的一部分,它可以帮助你在命令行中管理 GitHub 上的 issues。
语法:
gh issue <subcommand> [options] [args]
其中,subcommand 是执行操作的子命令,options 是可选参数,args 是需要传入的参数。
所有可用的子命令如下:
gh issue create
: 创建一个 issuegh issue list
: 列出当前仓库中的 issuesgh issue view
: 查看一个 issue 的详情gh issue update
: 更新一个 issuegh issue close
: 关闭一个 issuegh issue reopen
: 重新打开一个 issue
例如,如果你想创建一个新的 issue,可以使用以下命令:
gh issue create -t "New Feature" -b "This is a new feature"
这将会在当前仓库中创建一个标题为 "New Feature",描述为 "This is a new feature" 的 issue。
再比如:列出当前仓库下的所有 issue:
[root@dev sealer]# gh issue list
Showing 30 of 173 open issues in sealerio/sealer
#1989 COPY ${ARCH} is not support in Kubefile kind/bug about 8 days ago
#1986 APP instruction with remote file address will generate tmp f... kind/bug about 9 days ago
#1978 [Feature] k3s runtime design
.......
我们可以查看 1989 这个 issue:
gh issue view 1989
创建一个分支,在提交几次代码后修复了 issue 中描述的 BUG 后,然后可以使用 gh
命令来创建一个 pull request 来提交我们贡献的代码:
gh pr <subcommand> [options] [args]
其中,subcommand 是执行操作的子命令,options 是可选参数,args 是需要传入的参数。
所有可用的子命令如下:
gh pr create
: 创建一个 pull requestgh pr list
: 列出当前仓库中的 pull requestsgh pr view
: 查看一个 pull request 的详情gh pr update
: 更新一个 pull requestgh pr merge
: 合并一个 pull requestgh pr close
: 关闭一个 pull requestgh pr reopen
: 重新打开一个 pull request
例如,最常见的,我们去创建一个 pr :
gh pr create -b "feature-branch" -h "master" -t "New Feature" -b "This is a new feature"
####################################################
gh pr create -b <分支名> -h <目标分支名> -t <标题> -b <描述> -r <远程仓库名>
这将会在当前仓库中创建一个源分支为 "feature-branch",目标分支为 "master",标题为 "New Feature",描述为 "This is a new feature" 的 pull request。
其中:
-b <分支名>
: 你本地仓库的源分支名称,比如 feature-branch。-h <目标分支名>
: 目标仓库的目标分支名称,比如 master。-t <标题>
: pull request 的标题,例如 "New Feature"。-b <描述>
: pull request 的描述,例如 "This is a new feature".-r <远程仓库名>
: 远程仓库的名称,例如 origin
[root@dev sealer]# gh pr status
Relevant pull requests in sealerio/sealer
Current branch
There is no pull request associated with [cubxxw:main]
Created by you
You have no open pull requests
Requesting a code review from you
You have no pull requests to review
gh pr checkout
命令用于检出对应的 pull request 分支。该命令会自动拉取远程仓库中的最新代码并创建一个新的本地分支。
gh pr checkout <pull-request-number>
参数说明:
pull-request-number
:指定要检出的 pull request 的编号。
即使是使用 git ,最让我头疼的也是解决冲突:
解决冲突可以使用 gh pr checkout
命令来检出对应的 pull request 分支,然后在本地进行合并和解决冲突,最后使用 git push
将解决完冲突的代码推送到 GitHub。
具体来说,可以运行以下命令来解决冲突:
gh pr checkout <pull-request-number>
,检出对应的 pull request 分支。git pull <remote-name> <base-branch>
,将远程仓库中的最新代码拉取到本地。git merge <remote-name>/<base-branch>
或者git rebase <remote-name>/<base-branch>
合并或者重构你本地的代码,解决冲突git push <remote-name> <branch-name>
,将解决完冲突的代码推送到 GitHub。gh pr merge
合并代码到目标分支
注意:如果你使用了 git pull
命令,请务必使用 git push --force
将解决完冲突的代码推送到 GitHub,因为这样才能覆盖远程仓库中的冲突代码。
如果你不确定remote-name 和base-branch 可以使用 git remote -v
查看远程仓库地址和分支信息。
GitHub workflow 是 GitHub 的一个功能,允许你自动化项目中的工作流程。 使用 GitHub workflow,你可以设置触发器来执行特定的操作,如在提交代码时运行测试、在发布新版本时部署应用程序等。
在你的项目中,你可以在 .github/workflows
目录中创建一个新的 workflow 文件。这些文件是使用 YAML 格式编写的,定义了触发器和要执行的操作。
gh workflow
命令是 GitHub CLI 的一部分,它可以帮助你在命令行中管理 GitHub Actions 工作流。
具体而言,gh workflow
命令包括以下子命令:
gh workflow run
: 运行一个工作流gh workflow list
: 列出存储库中的所有工作流gh workflow view
: 查看工作流的详细信息
gh workflow run
命令可以在命令行中触发 GitHub Actions 工作流的运行。
gh workflow run <workflow-name> [flags]
[root@dev sealos]# gh workflow list -a
CI active 38929179
Build Controllers image active 38929180
Release active 38314128
Semgrep active 38929181
Build Services image active 39123670
Sync Docs active 38929182
Build Webhooks image active 39123671
gh workflow view
命令可以帮助你查看项目中的特定 workflow 的详细信息。 你可以使用这个命令来查看 workflow 的名称、状态、触发器、步骤、日志等信息。
gh workflow view [OWNER]/[REPO] [WORKFLOW_ID]
其中,OWNER 是存储库所有者的用户名,REPO 是存储库名称,WORKFLOW_ID 是 workflow 的唯一标识符。
gh config
命令是 GitHub CLI 的一部分,它可以帮助你管理 GitHub CLI 的配置。
具体而言,gh config
命令包括以下子命令:
gh config set
: 设置配置项的值gh config get
: 获取配置项的值gh config unset
: 删除配置项gh config list
: 列出所有配置项
例如,如果你想设置 GitHub CLI 的默认 API URL 为 "https://my-github-enterprise.com/api/v3",可以使用以下命令:
gh config set api.url https://my-github-enterprise.com/api/v3
这将会更新配置文件中的 api.url 项
gh config set
命令是 GitHub CLI 的一部分,它可以帮助你设置 GitHub CLI 的配置项。
gh config set <key> <value>
其中,key 是配置项的名称,value 是要设置的值。
告诉 GitHub CLI 哪个文本编辑器用于打开文本编辑器的命令。 例如,输入 gh config set editor "code -w"
将首选文本编辑器设置为 Visual Studio Code。 有关详细信息,请参阅 gh config set
。
🔍 GitHub CLI 2.0 支持扩展,允许任何人创建基于 GitHub CLI 核心功能的自定义命令。
gh extension
命令是 GitHub CLI 的一部分,它可以帮助你管理和使用 GitHub CLI 的扩展。
gh extension <subcommand> [options] [args]
其中,subcommand 是执行操作的子命令,options 是可选参数,args 是需要传入的参数。
所有可用的子命令如下:
gh extension install
: 安装一个扩展gh extension list
: 列出已安装的扩展gh extension update
: 更新一个扩展gh extension uninstall
: 卸载一个扩展
若要从当前目录安装开发中的扩展,使用 .
作为 repo
参数的值。
gh extension install repo
如果已安装同名的扩展,则该命令将失败。 例如,如果已安装 octocat/gh-whoami
,则必须在安装 hubot/gh-whoami
之前卸载它。
更多关于 gh extension 标签都可以前往 github 搜索 gh-extension
此扩展允许您从终端快速设置 GitHub 用户状态,让其他人知道您何时不可用或处于焦点模式。
安装:
gh extension install vilmibm/gh-user-status
此扩展是一个模糊查找器分支切换器,它按新近度对分支进行排序并显示有关任何相关拉取请求的信息。
安装:
gh extension install mislav/gh-branch
使用 contribute 扩展快速找到要在开源项目中处理的问题。这会找到在过去一年中创建的问题help wanted
或good first issue
标签,并且还没有关联的拉取请求。
我们的分类扩展采用我们的流程来分类我们开源存储库中的问题,并使其更广泛地可用。与其直接使用它,您可能会从中获得灵感来构建您自己的更具体到您的项目流程的分类扩展。
若要更新扩展,请使用 extensions upgrade
子命令。 将 extension
参数替换为扩展的名称。
gh extension upgrade extension
若要更新所有已安装的扩展,请使用 --all
标志。
gh extension upgrade --all
若要卸载扩展,请使用 extensions remove
子命令。 将 extension
参数替换为扩展的名称。
gh extension remove extension
为通常运行的命令定义别名。 例如,如果运行 gh alias set prd "pr create --draft"
,则你可以运行 gh prd
以快速打开草稿拉取请求。