【Github CLI】Take GitHub to the command line

2023-05-16

目录儿~

  • 一、Git、Github、GitLab
  • 二、Github CLI——gh
    • 2.1 gh简介
    • 2.2 gh的使用
      • 2.21 Github身份验证(必选)
      • 2.22 常用命令
        • (1)在Github仓库中打开当前项目
        • (2)gh配置 gh config
        • (3)克隆仓库 gh repo clone
        • (4)issue
        • (5)pull
        • (6)add、commit和push
    • 2.3 总结
  • 三、 Github访问优化

最近在Github上看到这个 Github CLI,从这个界面看貌似这个也能克隆仓库,而且下面小字说用这个官方的命令行界面速度更快。

虽然我一直都很快(指访问Github),但还是点进取来学习一下。
在这里插入图片描述

以前的提交、推送、克隆这些工作都是在相应的IED(比如在pycharm里面使用Git)里面进行的,有时也在git bash(或者powershell命令行)里面进行。

安装了Git之后,一般都可以在命令行使用git 开头的各种命令,如:

(base) PS C:\Users\dahu> git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env=<name>=<envvar>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.

一、Git、Github、GitLab

这里简单介绍一下这些概念,相比大家都比我熟悉了。

Git:
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。这是官方解释,结合自己经验来说,一般在不大不小的公司里,开发的大佬提交代码就是用这个工具的。

Github:
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。

GitLab:
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。一般来说中等规模的公司里面会用,毕竟相比于公有仓库这个可以私有化且免费。

Git是一种版本控制系统,就是一种工具软件,用于代码的存储和版本控制。

GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习,当然不公开的仓库有收费服务。

GitLab也是一个基于Git实现的在线代码仓库,你可以用GitLab自己搭建一个类似于GitHub一样的仓库,但!GitLab有完整的管理界面和权限控制,中规模企业会搭建Git私服。

GitHub和GiLlab都是基于Web的Git远程仓库,都提供了分享开源项目的平台,为开发者和团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。

二、Github CLI——gh

2.1 gh简介

CLI:一般指命令行界面。 命令行界面(command-line interface)。

所以Github CLI即Github的命令行界面,CLI并不是该工具的名称,这款命令行工具的名字叫:gh

项目地址:https://github.com/cli/cli

官方介绍:

gh is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to the terminal next to where you are already working with git and your code.

安装:
直接到上面的仓库下载你的系统对应的release版本就可以了。还支持winget、conda等方式安装。

也可以在这里一键下载windows版本:https://cli.github.com/

2.2 gh的使用

官方命令文档:https://cli.github.com/manual/gh

在进行下面的设置之前现在命令行或者powershell(都行)输入gh看看有没有输出,确保成功安装gh

2.21 Github身份验证(必选)

或者说使用gh登录到你的Github账户。

命令行输入:

 gh auth login

接下来会有许多选项供你选择,一般是通过键盘的上下键来选择,并用enter确认

可以参考我的选择:

(base) PS C:\Users\dahu> gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? SSH
? Upload your SSH public key to your GitHub account? C:\Users\dahu\.ssh\id_rsa.pub
? Title for your SSH key: (GitHub CLI)

? Title for your SSH key: GitHub CLI
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: 7080-B9B3
Press Enter to open github.com in your browser... 7080-B9B3
✓ Authentication complete.
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
HTTP 422: Validation Failed (https://api.github.com/user/keys)
key is already in use

(最后一行的错误不用管)

这里我用的是ssh-key,之前使用Git的时候就已经配置了的,gh会自动找到公钥。
如果出现了问题,可以看我之前的文章:Git配置

完成后输入gh auth status即可看到登录状态:

(base) PS C:\Users\dahu> gh auth status
github.com
  ✓ Logged in to github.com as CQUPTLei (oauth_token)
  ✓ Git operations for github.com configured to use ssh protocol.
  ✓ Token: *******************

2.22 常用命令

(1)在Github仓库中打开当前项目

进入本地仓库目录下,使用gh browse命令

(base) PS D:\chatGPT_based> gh browse
Opening github.com/CQUPTLei/chatGPT_based in your browser.

可选参数:

-b, --branch
打开传入的分支名
-c, --commit
打开上一次提交
-n, --no-browser
不打开浏览器,打印目标URL
-p, --projects
打开项目仓库的Project页面
-R, --repo <[HOST/]OWNER/REPO>
使用[HOST/]OWNER/REPO格式选择另一个存储库
-s, --settings
打开项目设置
-w, --wiki
打开项目仓库的wiki页面

(2)gh配置 gh config

查看全部gh配置:gh config list
查看指定项的配置:gh config get
对某项进行设置:gh config set,如gh config set editor vim,将编辑器设置为vim

当前支持的配置项:

git_protocol: 克隆、推送使用的协议 (default: "https")
editor: 文本编辑器
prompt: toggle interactive prompting in the terminal (default: "enabled")
pager: 在终端中切换交互式提示,默认开启
http_unix_socket: the path to a Unix socket through which to make an HTTP connection
browser: 用于打开URL的web浏览器

如:

(base) PS C:\Users\dahu> gh config list
git_protocol=ssh
editor=
prompt=enabled
pager=
http_unix_socket=
browser=

(3)克隆仓库 gh repo clone

此方式比较简便只要用户名和仓库名(OWNER/REPO)就可以了,如:gh repo clone cli/cli
(使用仓库url也同样支持)

将cli克隆到D盘:

(base) PS D:\chatGPT_based> cd ..
(base) PS D:\> gh repo clone cli/cli
Cloning into 'cli'...
remote: Enumerating objects: 43767, done.
remote: Counting objects: 100% (415/415), done.
remote: Compressing objects: 100% (246/246), done.
remote: Total 43767 (delta 224), reused 317 (delta 168), pack-reused 43352 eceiving objects: 100% (43767/43767), 26.41 MiB | 6.34 MiB/s
Receiving objects: 100% (43767/43767), 26.62 MiB | 6.36 MiB/s, done.
Resolving deltas: 100% (29558/29558), done.

总30几M,时间2秒左右。不过我不能确定是不是gh的功劳,因为我本来就快😁😁😁。大家可以试试。

我删除又使用git克隆了一下: git clone git@github.com:cli/cli.git
用时5s左右,感觉差不多。

又用两者克隆了一个700M的仓库,感觉差不多,可能是我网络好(开了proxy)。

目前,在我这里,gh repo clonegit clone的区别主要是命令的精简性好。

(4)issue

命令有:

  1. gh issue create
  2. gh issue list
  3. gh issue status
  4. gh issue close 等等
    如:
(base) PS D:\chatGPT_based> gh issue create --title "I found a bug" --body "Nothing works"

Creating issue in CQUPTLei/chatGPT_based

https://github.com/CQUPTLei/chatGPT_based/issues/1

在这里插入图片描述

更多示例:

$ gh issue create --title "I found a bug" --body "Nothing works"
$ gh issue create --label "bug,help wanted"
$ gh issue create --label bug --label "help wanted"
$ gh issue create --assignee monalisa,hubot
$ gh issue create --assignee "@me"
$ gh issue create --project "Roadmap"

(5)pull

Create a pull request :gh pr create

$ gh pr create --title "The bug is fixed" --body "Everything works again"
$ gh pr create --reviewer monalisa,hubot  --reviewer myorg/team-name
$ gh pr create --project "Roadmap"
$ gh pr create --base develop --head monalisa:feature

List pull requests in a GitHub repository:gh pr list

List PRs authored by you
$ gh pr list --author "@me"

List only PRs with all of the given labels
$ gh pr list --label bug --label "priority 1"

Filter PRs using search syntax
$ gh pr list --search "status:success review:required"

Find a PR that introduced a given commit
$ gh pr list --search "<SHA>" --state merged

(6)add、commit和push

好像现在只能用原来的git命令实现这些功能。

之前好像有gh repo push之类的命令。

我正在质问Github CLI官方,稍后更新。

作者刚刚回复我了:
在这里插入图片描述
意思就是说gh没有提交、推送的功能,这几项缺失的功能还是使用以前的git commit等命令来实现。

gh的优势就是

• Users, organizations, access-controlled repositories,
• Issues, Discussions,
• Pull Requests, code review,
• GitHub Actions, Codespaces,
• Gists,
• and more.

本文就当是了解了一下Github CLI吧,目前大部分工作还是会用Git,可能未来这个工具会被广泛应用吧。

2.3 总结

基础功能上感觉和Git的命令行功能差不多,这个功能更多,可能我还没用到。

克隆仓库倒还好用,

三、 Github访问优化

一般改改hosts就行了,把Github的DNS解析添加到本地就行了。

或者使用那个,你懂得。

修改hosts文件,可以用这个插件:https://github.com/aardio/Ghips

下载了打开就能用:先刷新,在更改hosts就行了,没必要打开自动刷新,发现打不开了在再用这个软件修改下就行了。
在这里插入图片描述
更改git混DNS解析后记得刷新DNS缓存:

ipconfig/flushdns
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Github CLI】Take GitHub to the command line 的相关文章

  • 手动合并拉取请求

    所以我在github上有以下情况 我从创建了一个新分支mainbranch并命名为userstory1 我在分支中推送了我的更改userstory1并向我的同事提出了拉取请求 他发现文件夹结构不正确 因此将我的代码文件夹重命名为mainbr
  • Git:推送到多个远程

    Short 如果您将多个远程存储库链接到本地 文件 是否有一种方法可以同时推送到它们 Long 由于工作原因 我的代码必须使用gitlab和github遥控器 因此 一旦我进行了一些本地更改 我就想更新这两个存储库 我的 git confi
  • 拒绝 git 推送

    To email protected cdn cgi l email protection xxx xxxxx git rejected master gt master non fast forward error failed to p
  • 如何使用 API 创建 GitHub Gist?

    通过查看 GitHub Gist API 我了解到可以为匿名用户创建 Gist 而无需任何 API 密钥 身份验证 是这样吗 我找不到以下问题的答案 创建时是否有任何限制 要点数量 等 有没有任何示例可以让我从表单文本输入字段发布代码来创建
  • 仅当上一步已运行时才运行 GitHub Actions 步骤

    我已经在 GitHub actions 中设置了一个工作流程来运行我的测试并创建测试覆盖率的工件 我的 YAML 文件的精简版本如下所示 name Build on pull request jobs build runs on ubunt
  • Github v3 API 让所有组织超过 100

    我正在尝试让所有组织项目通过 默认大小似乎是 30 而 100 似乎是每个请求的最大限制 但上面的链接仍然只返回前 100 项 即不是第 101 200 项 我也尝试过 http host api v3 organizations page
  • 创建新分支时,基础分支是什么?

    创建分支时我需要确认 纠正我的假设 如果我在主分支中 执行以下操作后 git checkout b some branch 这意味着我已经从 master 开始了一个新分支 另一方面 如果我签出另一个分支 并在那里创建一个分支 git ch
  • 通过 Github 桌面应用程序 (Windows) 推送到 Github 的提交未显示

    大约几个小时前 我通过 Github 网站创建了两个存储库 然后我转到 Github 桌面应用程序 并对这两个存储库分别进行了多次提交 我遵循的过程是 在 Github 网站上创建存储库 转到 Github 桌面应用程序 然后针对所选存储库
  • 如何在git中标记多个提交

    我想为多个提交 合并分支 创建一个标签 我们可以将多个提交分组到一个标签中吗 请帮助我 你想做的事是不可能的 标签就像分支一样 最多只能指向一次提交
  • 推送时出现 git 错误 来自服务器的空回复

    我一直在尝试对现有存储库进行新的更改 但是 我不断收到以下错误 MacBook Pro spa git push origin master XX 的用户名 致命密码 无法访问 https github com XXXX https git
  • 为什么我的 git 自动更新 Expect 脚本不起作用?

    我想制作一个脚本来更新我所有的 GitHub 存储库 我只需要输入我的用户名和密码 脚本将遍历存储库列表 调用git push并通过补充 Expect 脚本提供必要的信息 这是我的 bash 脚本 bin bash echo Updatin
  • 基于github仓库的本地仓库创建本地git仓库并保持更新

    我有一些基本的 git 知识 但我不知道如何实现这一点 我正在尝试克隆 github WordPress 入门主题下划线 https github com automattic s 这个想法是创建一个基本框架based 经过一些修改 在该存
  • 无法签出远程 git 分支

    我在 github 本地克隆中 以下是分行列表 git branch a master online demo remotes origin HEAD gt origin master remotes origin develop remo
  • BigQuery GitHub 数据:如何处理存储库名称更改?

    我的目标是跟踪我的仓库的星星总数 然而 它的 repo name 随着时间的推移而改变 如何实现这一目标githubarchive数据集 相关https stackoverflow com a 42930963 132438 https s
  • 从 IntelliJ IDEA 中的版本控制中删除文件

    我正在使用 IntelliJ IDEA 社区版 2016 1 我已将我的项目放在 Git 下 并将其托管在 GitHub 上 When I first hit that Share Project on GitHub button ever
  • Github - 自动将问题分配给项目

    我想将问题自动分配给 Github 中的项目 基本上自动为每个自动打开的问题自动生成以下屏幕截图 有任何想法吗 有两个本机支持的选项 有一个官方操作可以添加问题并拉取请求projects https docs github com en i
  • 如何在 Github Action 中使用 Github 发布版本号

    我创建了一个 Github 存储库 其中包含构建 npm 包并将其发布到 npmjs com 的操作 我的行动的触发因素是在 Github 上创建一个新版本 创建新版本时 Github 要求我提供版本号 我很想在操作中使用这个版本号并将其提
  • 无法获取 https://gerrit.googlesource.com/git-repo/clone.bundle

    我尝试按照以下说明创建一个 git 存储库 source android com source downloading html installing repo 但是当我尝试在工作目录中初始化存储库时 使用 Ubuntu 出现以下错误 wo
  • 没有工作树就无法使用 Git-Windows-git-pull

    我在 Windows 上遇到与 Git 相关的问题 无法从 git 上的存储库中提取更改 我能够添加 提交和推送我的更改 但不能拉取 它给了我一个错误 致命 C Git libexec git core git pull 不能在没有 工作树
  • 两个人同时在 git 中处理一个文件[重复]

    这个问题在这里已经有答案了 可能的重复 当两个对等点同时将更改推送到同一个远程时 git 如何工作 https stackoverflow com questions 4643998 how git works when two peers

随机推荐