Skip to content

Latest commit

 

History

History
554 lines (308 loc) · 16.7 KB

File metadata and controls

554 lines (308 loc) · 16.7 KB

第37节 GitHub CLI 命令行工具(gh)

❤️💕💕CS自学指南,大学教育无论是深度还是广度都没有办法支撑我们的职业素养,这个板块算是自己在CS学习中额外补充和记录的。个人博客:http://nsddd.top


[TOC]

开始

[[Github CLI]] 是一个非常好用的命令行工具,可以让开发者通过命令行于 GitHub 进行无缝的协同工作,也就是我们直接在命令行终端上就可以进行 pull requests、issues 等其他功能。

image-20230127103824194

基于我目前处于 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

网页端验证即可:

image-20230127104401194

令牌登陆验证

选择 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

使用 gh repo

开始在命令行中使用 GitHub。 例如,使用 gh issue statusgh issue list --assignee @me 查找要处理的问题。 使用 gh pr create 创建拉取请求。 使用 gh pr checkoutgh pr diffgh 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 标签的问题:

显示仓库 README 文件

gh repo view 命令

gh repo view [OWNER]/[REPO]

'gh repo view' 命令可以帮助你查看存储库的详细信息。 你可以使用这个命令来查看诸如存储库名称、描述、语言、活跃度、贡献者等信息。

如果不加 [OWNER]/[REPO] ,那么默认选中的是当前所在目录的 README 文件。

💡简单的一个案例如下:

gh repo view cubxxw/cubxxw

gh issue

gh issue 命令是 GitHub CLI 的一部分,它可以帮助你在命令行中管理 GitHub 上的 issues。

语法

gh issue <subcommand> [options] [args]

其中,subcommand 是执行操作的子命令,options 是可选参数,args 是需要传入的参数。

所有可用的子命令如下:

  • gh issue create: 创建一个 issue
  • gh issue list: 列出当前仓库中的 issues
  • gh issue view: 查看一个 issue 的详情
  • gh issue update: 更新一个 issue
  • gh issue close: 关闭一个 issue
  • gh issue reopen: 重新打开一个 issue

创建一个 issue

例如,如果你想创建一个新的 issue,可以使用以下命令:

gh issue create -t "New Feature" -b "This is a new feature"

这将会在当前仓库中创建一个标题为 "New Feature",描述为 "This is a new feature" 的 issue。

列出所有 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                         
.......

查看某个 issue

我们可以查看 1989 这个 issue:

gh issue view 1989

gh pr

创建一个分支,在提交几次代码后修复了 issue 中描述的 BUG 后,然后可以使用 gh 命令来创建一个 pull request 来提交我们贡献的代码:

gh pr <subcommand> [options] [args]

其中,subcommand 是执行操作的子命令,options 是可选参数,args 是需要传入的参数。

所有可用的子命令如下:

  • gh pr create: 创建一个 pull request
  • gh pr list: 列出当前仓库中的 pull requests
  • gh pr view: 查看一个 pull request 的详情
  • gh pr update: 更新一个 pull request
  • gh pr merge: 合并一个 pull request
  • gh pr close: 关闭一个 pull request
  • gh pr reopen: 重新打开一个 pull request

创建一个 pr

例如,最常见的,我们去创建一个 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

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。

具体来说,可以运行以下命令来解决冲突:

  1. gh pr checkout <pull-request-number>,检出对应的 pull request 分支。
  2. git pull <remote-name> <base-branch>,将远程仓库中的最新代码拉取到本地。
  3. git merge <remote-name>/<base-branch> 或者 git rebase <remote-name>/<base-branch> 合并或者重构你本地的代码,解决冲突
  4. git push <remote-name> <branch-name>,将解决完冲突的代码推送到 GitHub。
  5. gh pr merge 合并代码到目标分支

注意:如果你使用了 git pull 命令,请务必使用 git push --force 将解决完冲突的代码推送到 GitHub,因为这样才能覆盖远程仓库中的冲突代码。

如果你不确定remote-name 和base-branch 可以使用 git remote -v 查看远程仓库地址和分支信息。

使用 gh workflow

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 命令

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 命令

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

gh 扩展 gh extension

🔍 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 wantedgood first issue标签,并且还没有关联的拉取请求。

我们的分类扩展采用我们的流程来分类我们开源存储库中的问题,并使其更广泛地可用。与其直接使用它,您可能会从中获得灵感来构建您自己的更具体到您的项目流程的分类扩展。

更新扩展

若要更新扩展,请使用 extensions upgrade 子命令。 将 extension 参数替换为扩展的名称。

gh extension upgrade extension

若要更新所有已安装的扩展,请使用 --all 标志。

gh extension upgrade --all

卸载扩展

若要卸载扩展,请使用 extensions remove 子命令。 将 extension 参数替换为扩展的名称。

gh extension remove extension

alias 设置别名

为通常运行的命令定义别名。 例如,如果运行 gh alias set prd "pr create --draft",则你可以运行 gh prd 以快速打开草稿拉取请求。

END 链接