GitHub hub命令详解
在使用 GitHub 的过程中,会不可避免地频繁接触到 git 命令。而我们在这里介绍的 hub 命令则是一个封装了 git 命令的命令行工具,能够辅助用户使用 GitHub。
这是个很方便的工具,经常使用 GitHub 的读者请务必一试。
hub 命令概要
hub 命令是由 Chris Wanstrath 带头开发的软件。在 hub 命令仓库的 README.md 文件中,我们可以看到
git + hub = github
这样一句话。正如这句话所说,hub 命令将通常的 git 命令进行封装并增加几项功能,就可以调用 GitHub 的 API 发送命令。由于其封装了 git 命令,所以能够执行所有 git 命令的操作。另外通过 hub 命令功能还得到了扩展,比如指定 GitHub 端仓库时可以用简略路径替代完整路径等。
hub 命令的安装
下面介绍 hub 命令的安装方法。hub 命令需要以下版本的软件:- Git 1.7.3 以上
- Ruby 1.8.6 以上
1) 开始安装 hub 命令
如果是 OS X 系统,可以从版本管理系统的 Homebrew 或 MacPorts 轻松安装。如果用 Homebrew,则执行下面的命令。
$ brew install hub
如果用 MacPorts,则执行下面的命令。$ sudo port install hub
只此一步就能完成安装。使用其他环境的读者请按照下面的流程安装。
$ curl https://hub.github.com/standalone -sLo ~/bin/hub
$ chmod +x ~/bin/hub
$ echo 'export PATH="~/bin:$PATH"' >> ~/.bash_profile
重新启动 shell 后,就可以使用 hub 命令了。2) 确认 hub 运行情况
通过下面的命令确认运行情况。
$ hub ——version
git version 1.8.5.2
hub version 1.10.6
3) 设置别名
使用 hub 命令的最佳实践就是将相应 git 设置成 hub 的别名。hub 命令可以完成 git 命令的所有操作,所以不会影响 git 命令原本的功能。具体设置方法其实很简单,只需在 shell 的配置文件(.bash_profile 等)中添加下面一句即可。
eval "$(hub alias -s)"
4) 实现 shell 上的功能补全
为了让 hub 命令的功能更加完善,Github 上还发布了面向 bash 和 zsh 的脚本。将正在使用的 shell 与相应脚本组合,就可以让 hub 命令变得更加易用。在某些安装方法中它们会被自动安装。5) ~/.config/hub
hub 命令在初次访问 GitHub 的 API 时会询问用户名和密码,输入完之后会进行 OAuth 认证,然后我们就可以通过 API 操作 GitHub 了。这时 OAuth Token 会自动保存在~/.config/hub
中。各位请慎重保管这个 Token。
——
github.com:
- oauth_token: Oauth Token
user:hirocaster
hub 命令的使用
下面我们来实际使用 hub 命令,看看它为 Git 扩展了哪些功能。为了与 git 命令区分得更明显,接下来讲解的内容中我们都直接输入 hub 命令。已经将 git 命令设置为别名的读者可以把 hub 的部分替换为 git,运行效果是一样的。当然,直接输入 hub 命令也不会有任何问题。
1) hub clone
使用 hub clone命令,可以省去指定 GitHub 端仓库的部分。$ hub clone Hello-World
上面这个命令与下面的命令效果相同。$ git clone git@github.com/用户名/Hello-World.git
如果要指定用户,可以输入以下命令。$ hub clone octocat/Hello-World
效果与下面这个命令完全相同。$ git clone git://github.com/octocat/Hello-World.git
2) hub remote add
hub remote add 也可以省略指定 GitHub 端仓库的部分。$ hub remote add octocat
上面这个命令与$ git remote add octocat git://github.com/octocat/当前操作仓库的名称.git
的效果完全相同。3) hub fetch
hub fetch与 hub remote add命令一样,只需输入用户名就可以指定当前操作的仓库执行命令,在此不再赘述。4) hub cherry-pick
hub cherry-pick 命令只需要输入 URL 就可以获取对应修改并应用到当前分支。在审查代码时,如果发现某个提交中包含值得应用到当前分支的修改,用这个命令可以轻松完成操作。$ hub cherry-pick https://github.com/hirocaster/github-book/commit/606a76f6831194cfe8a0fdcd6e974a29a4526cbf
这个命令可以将下面两个命令的效果一次性执行。
$ git remote add -f hirocaster git://github.com/hirocaster/github-book.git
$ git cherry-pick 606a76f6831194cfe8a0fdcd6e974a29a4526cbf
5) hub fork
hub fork 命令的功能与 GitHub 页面的 Fork 按钮相同。比如我们 clone 了其他用户的仓库,现在想 Fork 成自己的仓库,只需要执行$ hub fork
这一命令,就可获得与下面这一系列操作相同的效果(在GitHub上对仓库做Fork处理)。$ git remote add -f 用户名 git@github.com:当前操作仓库的名称.git
执行完毕后,Fork 出的仓库会被设置成当前本地仓库的远程仓库(以用户名为标识符)。6) hub pull-request
hub pull-request 命令为我们提供了创建 Pull Request 的功能。利用这个命令创建 Pull Request 可以不必访问 GitHub 页面。$ hub pull-request -b github-book:master -h hirocaster:index5-draft
使用这条命令,可以从 hirocaster 的 index5-draft 分支向 github-book 的 master 分支发送 Pull Request。执行命令后编辑器会启动,用户可以在编辑器中按照一般 Pull Request 的方式进行描述。第一行将成为 Pull Request 的标题,之后空一行,从第三行开始是 Pull Request 的正文。如果 index5-draft 的作业内容是已创建的 Issue#123 的作业内容,我们可以直接将 Issue 作为 Pull Request 发送。
$ hub pull-request -i 123 -b github-book:master -h hirocaster:index5-draft
只需附加参数 - i以及 Issue 的编号即可。目前在 Web 上无法像这样将 Issue 直接作为 Pull Request 发送,所以建议各位开发者记下这个技巧。7) hub checkout
收到 Pull Request 的时候,如果想在本地检查该分支的运行状况,可以使用 hub checkout命令。只需要在命令后添加相应 Pull Request 的 URL,就可以将接收到的分支 checkout。$ hub checkout https://github.com/hirocaster/wdpress69/pull/208
这个命令与下面两个命令效果相同。
$ git remote add -f -t impression git://github.com/tomamu/wdpress69.git
$ git checkout ——track -B tomamu-impression tomamu/impression
Pull Request 发送方的用户名 - 分支名
的形式在本地仓库中创建分支。Pull Request 送来的内容已经 checkout 完毕,管理者可以轻松地检查运行状况。
8) hub create
hub create 命令适用于本地已经创建仓库,但 GitHub 端没有创建仓库的情况。$ hub create
只需要输入上面这个简短的命令,GitHub 端就会创建一个同名仓库,并将其设置为本地仓库的远程仓库。这与下面这一系列操作效果相同(在GitHub上创建仓库)。$ git remote add origin git@github.com:用户名/当前操作仓库的名称.git
现在只要进行 push,代码就可以放到 GitHub 端的仓库中。需要注意的是,这种方法创建的都是公开仓库,请谨慎使用。9) hub push
hub push命令支持同时向多个远程仓库进行 push 操作。$ hub push origin,staging,qa new-feature
这一命令可以对下列远程仓库同时执行 git push命令。- origin
- staging
- qa
如果遇到需要向多个仓库进行 push 操作的情况,各位不妨试一试。
10) hub browse
hub browse 命令可以在浏览器中打开当前操作的仓库在 GitHub 上对应的仓库页面。$ hub browse
这个命令与下面的效果相同。$ open https://github.com/用户名/当前操作仓库的名称
执行后,当前操作仓库的页面会在浏览器中打开。11) hub compare
如果想查看当前特性分支与 master 分支的差别,可以使用 hub compare 命令。这个命令能够打开 GitHub 上对应的查看差别的页面。在特性分支下执行下面的命令。
$ hub compare
其效果与执行下面命令的效果相同。$ open https://github.com/用户名/当前操作仓库的名称/compare/当前分支名
执行后,GitHub 上查看分支间差别的页面就会打开。需要注意的是,这种方法是查看 GitHub 端仓库内的差别,如果最新代码在本地仓库,需要先将分支 push 给远程仓库。现在各位应该明白,导入 hub 命令可以使熟悉命令行操作的开发者对 GitHub 更加得心应手。我们只介绍了使用频率较高的一些命令,其实 hub 命令并不止这些。
$ hub help
执行上面的命令,可以查看 hub 命令的相关帮助。里面介绍了添加参数后更加细致的操作,各位不妨去看一看。拓展阅读
我们让 GitHub Enterprise支持 hub 命令。hub 命令不但可以用于 GitHub,还可以用于 GitHub Enterprise 的操作。使用 GitHub Enterprise 的读者请运行下面的命令。
$ git config ——global ——add hub.host my.example.org
请将my.example.org替换成GitHubEnterprise的主机名~/.gitconfig 文件中就会添加下面这条设置。
[hub]
host = my.example.org