许多人通过为 GitHub 上的项目贡献代码来参与开源软件开发。他们中的许多人使用 GitHub 的图形用户界面 (GUI),尤其是那些刚接触命令行界面 (CLI) 的人。但是,如果你更喜欢在命令行工作呢?
我最近偶然发现了 hub,这是一个命令行工具,它通过添加 GitHub 特有的功能来扩展 Git,使其更容易熟悉 Git 命令。因此,如果你厌倦了点击式的 GUI,但又希望获得一些关于 Git 有时令人困惑的语法的帮助,那么 hub 就是为你量身打造的工具。
在进一步阅读之前,最好先复习一下 Git 术语。
安装 hub
hub 的使用依赖于 Git,所以首先,确认我们已经安装了 Git
git --version
你的 Git 版本必须是 1.7.3 或更高版本。如果缺少也没关系;你可以使用 Homebrew(一个开源包管理器)或你的发行版的内置包管理器(dnf、apt 等)快速安装它。我喜欢 Homebrew,所以我们将坚持使用它。Homebrew 以前在 Linux 上被称为 Linuxbrew,但现在它使用与 macOS 版本相同的名称。它可以安装在你的主目录中,这意味着你不需要 sudo 权限就可以使用它安装应用程序。如果你喜欢其他安装方法,请参阅 Git 文档。
要在 Fedora 上安装 brew,Homebrew 的命令行实用程序
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
由于我们没有使用 sudo,安装脚本会将 Homebrew 安装到 ~/.linuxbrew。要了解更多关于它的工作原理,请参阅 文档。
接下来,让我们使用 brew 安装 hub。
$ brew install hub
接下来,通过检查其版本来验证 hub 是否安装正确
$ hub --version
git version 2.25.0
hub version 2.14.1
输出显示了 hub 和 Git 的版本。瞧!你已经成功安装了 hub。
hub 入门
使用你将在 GitHub 上托管的新仓库来试用 hub。导航到任何你想要初始化 Git 的文件夹
$ cd Documents
$ mkdir Test; cd Test/
$ git init
Initialized empty Git repository in /Users/SudeshnaSur/Test/.git/
在其中放置任何文件。Git 只会看到已更改的文件,所以使用 echo 向其中添加一些文本
$ echo "Hello" > test.txt
检查 git status 并添加
$ git status
On branch master
No commits yet
Untracked files:
test.txt
nothing added to commit but untracked files present
$ git add .
通过使用 git add,我们已经暂存了更改,但尚未提交它们。在提交之前,我们需要一个帐户。如果你还没有帐户,请使用 这份分步指南 创建一个 GitHub 帐户。接下来,我们需要配置本地版本的 Git 以使用该帐户的用户名和电子邮件。此信息将包含在你添加到任何仓库的每个提交消息中(因为你将其设置为全局)
git config --global user.email "email@example.com"
git config --global user.name "Your Name"
值得注意的是,你可以使用 此功能 将你的电子邮件设置为私有。无论哪种方式,都将你的电子邮件设置为你的 GitHub 电子邮件地址。
现在,我们可以创建一个将分配给我们用户名的提交。让我们检入现有的更改
$ git commit -m 'Adding a test file'
[master (root-commit) 07035c94e038] Adding a test file
1 file changed, 1 insertion(+)
create mode 100644 test.txt
$ git status
On branch master
nothing to commit, working tree clean
使用 hub 的高级功能
到目前为止,一切都与使用 git 相同。接下来才是有趣的地方。
现在,如果你键入 hub create,它将在 GitHub 上创建一个新仓库,其名称与当前目录相同
$ hub create
Updating origin
https://github.com/SudeshnaSur/Test
使用 hub 甚至可以将你的仓库与远程镜像链接起来
$ git remote -v
origin git@github.com:SudeshnaSur/Test.git (fetch)
origin git@github.com:SudeshnaSur/Test.git (push)
使用 hub 克隆和 Fork
你也可以使用 hub 克隆和 fork,而无需点击 GitHub GUI。我喜欢 hub 自动识别我们定位的仓库,只要它具有命名空间,然后是斜杠,然后是仓库名称。因此,如果我们想克隆 hub 本身的源代码,可在 https://github.com/github/hub 获取,我们只需要写
$ hub clone github/hub
Cloning into 'hub'...
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 19712 (delta 7), reused 13 (delta 4), pack-reused 19686
Receiving objects: 100% (19712/19712), 6.76 MiB | 7.25 MiB/s, done.
Resolving deltas: 100% (12912/12912), done.
现在我可以对我的仓库副本进行正常更改。我将创建一个名为 topic 的分支,检出该分支,然后进行少量更改并提交它(这些都是标准的 Git 命令)
$ cd hub
$ git checkout -b topic
Switched to a new branch 'topic'
$ echo “Hey” >test2.txt
$ git add .
$ git commit -m ‘Adding test 2’
[master cbb6fde5805a] Adding test 2
1 file changed, 1 insertion(+)
create mode 100644 test2.txt
此克隆当前是 github/hub,我没有写入权限。但我可以轻松地 fork 仓库并将更改推送到它
$ hub fork –remote-name origin
输出报告说你的帐户正在 fork 原始仓库及其所有分支。请注意,如果你已经有一个名为 origin 的远程仓库,hub 将默认将新远程仓库命名为你的用户名(如果这个术语令人困惑,请阅读这篇关于远程仓库和 fork 的复习)。接下来,让我们将分支 topic 推送到我的 fork
$ git push origin topic
我现在可以直接从命令行通过键入以下命令打开拉取请求 (PR)
$ hub pull-request
这将打开一个文本编辑器,以便我可以添加 PR 消息,然后我可以从那里管理 PR。我甚至可以使用 hub pr list 命令从命令行管理其他 PR。
使用其他 hub 功能
故事并没有到此结束;hub 提供了许多其他功能
- 检查我们分支的持续集成 (CI) 状态
$ hub ci-status
- 在你的默认 Web 浏览器中打开一个项目
$ hub browse github/quickstart
- 同步你所有的本地分支以匹配远程仓库的最新状态
$ hub sync
- 列出分配给你的名字的问题
$ hub issue --assignee User_Name
- 列出你所在仓库中的未解决问题
$ hub issue --limit 20 [lists only 20 issues]
- 打开当前项目的问题页面
$ hub browse --issues
- 在审查 PR 时检出一个 PR
$ hub pr checkout 123
- 合并后关闭问题
$ hub issue update 123 --state closed
- 将问题转移到新的仓库
$ hub issue transfer 123 ANOTHER-REPO
- 在 GitHub 中删除仓库
$ hub-delete github/wiki-links
hub 既实用又易于从命令行使用。如果你正在从 GUI 过渡到命令行,并希望使这种体验更直观,请试用 hub。
2 条评论