许多人通过为 GitHub 上的项目做贡献而参与到开源软件开发中。他们中的许多人使用 GitHub 的图形用户界面 (GUI),尤其是那些刚接触命令行界面 (CLI) 的人。但是,如果你更喜欢在命令行工作呢?
我最近发现了 hub,一个命令行工具,它通过添加 GitHub 特定的功能来扩展 Git,使其更容易熟悉 Git 命令。因此,如果你厌倦了点击式的 GUI,但又想获得 Git 有时令人困惑的语法的帮助,那么 hub 就是为你准备的工具。
在进一步阅读之前,最好先回顾 Git 术语。
安装 hub
hub 的使用依赖于 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 条评论