GitHub 易于使用的命令行工具:“gh”!

如果您一直在使用 GitHub,并且像我一样更喜欢使用命令行来完成所有工作,而不会在 GUI 上出现任何复杂情况,那么您可能已经注意到 GitHub 如何开始利用他们名为“gh”的不太新的工具。我决定尝试一下,因为它看起来毕竟很有前途。我个人非常喜欢它——以至于我想写一篇关于它的文章!

在开始之前,我需要解释一下我将在本文中使用的几个术语。

“GH”代表“GitHub”。这也是该工具名称的由来,因此它不能与 Git 本身混淆。为了解释它的一般用途,您可以创建、分叉、删除、浏览存储库;创建拉取请求;还有很多。如果你找不到某个功能但又不想离开终端,它还提供了一个基于文本的浏览器供你浏览 GitHub 中的页面。

“CLI”代表“C指令 LINE I界面”。该终端(或 Windows 中的命令提示符)就是其中之一。如果应用程序名称旁边附加了“CLI”(本文中为“Git CLI”),则表示该应用程序仅通过终端运行。在这种情况下,“Git CLI”就是我们所知道的 Git。就像我们进行提交或变基的命令一样。

GUI 代表“G粗话 UI界面”,它是我们“导航”的界面。更好的说法是,桌面环境通常是 GUI。

“API 密钥”是某种用于对服务进行身份验证的秘密字符串/文件。请注意,当您使用它进行身份验证时,它会绕过两因素身份验证等。因此,请确保将它们保存在其他方式无法触及的地方。

首先,这个工具是什么?它如何处理我们通过 Git CLI 执行的操作?

“gh”可以被认为是一个开源(源代码)包装器利用 Git CLI 本身和 GitHub API 来完成工作。事实上,您甚至可以将参数传递给它使用的 Git 命令!我稍后会详细介绍这些内容。

安装和设置

请记住,我将使用以下命令完成安装 Termux。但该过程应该与基于 Debian 的发行版几乎相同 - 例如,Ubuntu 在其官方存储库上有它。对于 Windows,我想您需要 CygWin 或 WSL。 ˙\_(ツ)_/˙

# 让我们先安装该工具。还要安装 Git,因为它是 gh 的后端。 $ pkg install git gh -y # 然后在一切之前,我们需要进行身份验证。这将在工具的数据库中保存 # 新的 API 密钥,因此您无需再次进行身份验证。如果你已经设置了 GITHUB_TOKEN,这将不起作用,所以首先取消设置它。 :) $ gh 身份验证登录

现在,在我们继续之前,我需要指出几件事。

  • 首先, 不要选择“GitHub Enterprise Server” 如果您没有某种自托管的 GitHub。
  • 其次, 如果您在 GitHub 帐户上添加了公钥,请使用 SSH 而不是 HTTPS。 如果您丢失了 API 密钥,您至少不会丢失 SSH 密钥,因此它也是一个很好的后备方法。
  • 三、选择使用浏览器登录 仅当您手头没有 API 密钥时! 确实,当你已经拥有一把钥匙时,再拥有另一把钥匙是没有意义的。

完成设置后,让我们告诉 Git CLI 相关信息。

$ gh auth setup-git

这将进行必要的 Git CLI 配置,以防万一您的反应突然介入并让您使用 Git 而不是 GH。

一些基本命令

现在您已经设置了 GH,让我以故事为基础教您几个基本命令。

首先,假设您想要创建对我的本地清单存储库的拉取请求。你想先分叉它。

$ gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest 已经存在?您想克隆叉子吗?是克隆到“platform_manifest”...远程:枚举对象:136,完成。远程:计数对象:100% (136/136),完成。远程:压缩对象:100% (81/81),完成。远程:总计 136 个(增量 46),重用 89 个(增量 12),包重用 0 接收对象:100% (136/136),30.70 KiB | 166.00 KiB/s,完成。解决增量:100% (46/46),完成。更新上游 来自 github.com:windowz414/platform_manifest * [新分支] amyrom/rosie ->上游/amyrom/rosie * [新分支] aosp-11.0 ->上游/aosp-11.0 * [新分支] aosp-14.1 ->上游/aosp-14.1 * [新分支] arrow-11 -> 上游/arrow-11 * [新分支] cm-1 -> 上游/cm-1 * [新分支] dot11 -> 上游/dot11 * [新分支] ] e/os/v7.1-nougat ->upstream/e/os/v7.1-nougat * [新分支]fluid-15.1 ->upstream/fluid-15.1 *[新分支]fox_17.1 ->upstream/fox_17.1* [新分支] hentai-rika -> 上游/hentai-rika * [新分支] ion-pie -> 上游/ion-pie * [新分支] lineage-18.1 -> 上游/lineage-18.1 * [新分支] lineage -18.1 -> 上游/lineage-18.1 * [新分支] lineage-19.0 -> 上游/lineage-19.0 * [新分支] lineage-1_teos -> 上游/lineage-1_teos * [新分支] lineage-11.0 - > 上游/lineage-11.0 * [新分支] main -> 上游/主 * [新分支] mkn-mr1 -> 上游/mkn-mr1 * [新分支]vengeos-r11 -> 上游/revengeos-r11。 XNUMX * [新分支] stellar-SXNUMX ->upstream/stellar-SXNUMX * [新分支] teos-n ->upstream/teos-n * [新分支] weebprojekt-XNUMX ->upstream/weebprojekt-XNUMX ✓ 克隆分叉

然后,假设您有一个名为“wz414-labs”的独立实验组织,您还没有分叉您的个人资料,并且想要克隆到那里,然后通过那里打开拉取请求。您还想克隆“cm-14.1”分支,这样您就不需要再次对其执行 git-checkout 。

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ 创建了 fork wz414-labs/platform_manifest ?您想克隆叉子吗?是克隆到“platform_manifest”...远程:枚举对象:136,完成。远程:计数对象:100% (136/136),完成。远程:压缩对象:100% (81/81),完成。远程:总计 136 个(增量 46),重用 89 个(增量 12),包重用 0 接收对象:100% (136/136),30.70 KiB | 120.00 KiB/s,完成。解决增量:100% (46/46),完成。更新上游 来自 github.com:windowz414/platform_manifest * [新分支] amyrom/rosie ->上游/amyrom/rosie * [新分支] aosp-11.0 ->上游/aosp-11.0 * [新分支] aosp-14.1 ->上游/aosp-14.1 * [新分支] arrow-11 -> 上游/arrow-11 * [新分支] cm-1 -> 上游/cm-1 * [新分支] dot11 -> 上游/dot11 * [新分支] ] e/os/v7.1-nougat ->upstream/e/os/v7.1-nougat * [新分支]fluid-15.1 ->upstream/fluid-15.1 *[新分支]fox_17.1 ->upstream/fox_17.1* [新分支] hentai-rika -> 上游/hentai-rika * [新分支] ion-pie -> 上游/ion-pie * [新分支] lineage-18.1 -> 上游/lineage-18.1 * [新分支] lineage -18.1 -> 上游/lineage-18.1 * [新分支] lineage-19.0 -> 上游/lineage-19.0 * [新分支] lineage-1_teos -> 上游/lineage-1_teos * [新分支] lineage-11.0 - > 上游/lineage-11.0 * [新分支] main -> 上游/主 * [新分支] mkn-mr1 -> 上游/mkn-mr1 * [新分支]vengeos-r11 -> 上游/revengeos-r11。 XNUMX * [新分支] stellar-SXNUMX ->upstream/stellar-SXNUMX * [新分支] teos-n ->upstream/teos-n * [新分支] weebprojekt-XNUMX ->upstream/weebprojekt-XNUMX ✓ 克隆分叉

你看,我没有使用“-b cm-14.1”,而是进行了长论证。截至本文撰写之日(16 年 2022 月 XNUMX 日),GH 有一个错误,即它无法正确地将短参数传递给 Git CLI,因此需要将其作为长参数来完成。

完成后,您会定期进入该文件夹,进行更改,提交然后推送它,并准备好执行拉取请求。为此,您只需要一个简单的

$ gh pr create --branch="cm-14.1" 在 windowz414/platform_manifest 中创建 wz14.1-labs:cm-14.1 到 cm-414 的拉取请求?标题 teos:更改为 Git-Polycule?身体?下一步是什么?提交 https://github.com/windowz414/platform_manifest/pull/1

如果您不附加“–branch=cm-14.1”,您将创建针对“主”分支的 PR,如果处理不当,这当然会导致问题。

现在,我需要合并这个 PR,对吧?因此,我首先克隆存储库,签出分配的分支,并首先列出 PR。

# 首先克隆。 $ git clone https://github.com/windowz414/platform_manifest 克隆到“platform_manifest”...远程:枚举对象:136,完成。远程:计数对象:100% (136/136),完成。远程:压缩对象:100% (81/81),完成。远程:总计 136 个(增量 46),重用 89 个(增量 12),包重用 0 接收对象:100% (136/136),30.70 KiB | 137.00 KiB/s,完成。解决增量:100% (46/46),完成。 # 然后去分行结帐。 $ git checkout cm-14.1 分支 'cm-14.1' 设置为跟踪 'origin/cm-14.1'。切换到新分支 'cm-14.1' # 现在列出 PR。 $ gh pr list 在 windowz1/platform_manifest #1 teos 中显示 414 个开放拉取请求中的 1 个:更改为 Git-Polycule wz414-labs:cm-14.1

现在我们看到有一个 PR 将远程更改为“Git-Polycule”,让我们看看它发生了什么变化。

$ gh pr diff 1 diff --git a/teos.xml b/teos.xml 索引 b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414@@ 

看起来很有希望!是时候合并了!

$ gh pr 合并 1 ?您想使用什么合并方法?变基并合并?下一步是什么?提交 ✓ 重新定位并合并拉取请求#1(teos:更改为 Git-Polycule)

现在我已经合并了它,您可以删除您的分叉。

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ 删除存储库 wz414-labs/platform_manifest

您会看到直接删除了存储库,没有确认请求,因为我在那里传递了“–confirm”参数。如果你不通过它,你会得到这个:

$ gh repo 删除 windowz414/systemd 吗?输入 windowz414/systemd 确认删除:

您需要输入整个存储库名称。浪费时间…

总结

简而言之,“gh”是一个相当简化的 Git CLI/Curl 包装器,将简单的 Git 操作和 GitHub API 统一在同一屋檐下。你如何利用它?你觉得它像我一样充满希望吗?期待着听到您的意见!

相关文章