对于大多数使用 Git 作为 VCS 的程序员来说,应该都接触过 GitHub,
GitHub 就像程序员的淘宝一样,里面充满了好东西,时时刻刻都可能给你惊喜!
很多人可能不仅在 GitHub 寻找合适的车轮子,还可能会为造车轮子贡献自己的力量,
往往会使用一些基本操作来完成,典型的为:
当然,如果是项目的维护者,还会使用 merge
等。
但是,我想很少人会使用过 GitHub 的命令行接口 Hub,
通常的操作都可以通过友好的 Web 界面,点几个 button 来完成,简单实用!
所以很少有需求会迫切需要一个命令行工具来完成这些操作,我也是在想要清理一下自己的
repositories 的时候,发现一个一个在 Web 上来清理确实不够高效,如果有命令行接口的话,
可以很快进行批量操作,或许需要加几行 shell 命令等,那也是极好的。
所以,在 Google 之后(不要问我怎样翻墙,首选 GoAgent),
我发现真的有 GitHub 的命令行工具 Hub,主页上是这样介绍的:
git + hub = github
Hub 是对 git 的一层封装,以便和 GitHub 完美结合,而且号称对 git 完全兼容,而且推荐直接将
hub 设置为 git 的别名,所以在执行 git 的时候实际上是在执行 hub。别名设置如下:
Hub 主页上有完善的文档教用户怎样安装、设置、使用命令详解等等,这里不再赘述。
为了勾起读者的兴趣,简单介绍一下怎样使用 hub 来进行最常见的在 Github 上的开发。
这里我们直接进入正题,介绍安装和设置比较乏味!
Fork 一个项目
要在 GitHub 上进行开发,往往会基于一个已有的开源项目,所以首先需要 fork 这个项目。
这里和 Web 上的操作有点不同,从 Web 上是首先找到一个项目,然后点击一下 Fork
,
然后会在自己的空间内创建这个项目。
而使用 hub, 则首先是 clone 下来原有的项目(以 hub 项目为例,git clone github/hub),然后再执行
fork
子命令,完成后,可以看到本地添加了一个 remote,而且通过 web
页面也可以看到自己的空间里已经添加了一个叫 hub 的项目,fork 自 github/hub。
PR(Pull Request)
在本地完成一些开发后,可能想要将 patch 提交给 upstream 项目,在 GitHub 中,向上游提交 patch
通过 PR 来完成。
当然,这里我不会向 hub 提交 PR,因为我只是在写博客,在吃过午饭后,找到一个很不错的项目,
而且发现一个非常小的 bug,可以作为博客素材了。如下:
完成 fork 后,我会修改一处文档,diff 如下:
git pull-request
会检查你在 GitHub 上的自己的项目和上游项目相应的 branch 是否有不同,所以,
首先将这个修改提交到自己的项目中,push 就行。
然后,提交 PR,如下:
hub
还有许多有用的命令,例如打开浏览器查看项目,merge PR,新建 repo 等等,这里不再介绍,
感兴趣的读者可以参考 Hub 文档。
最后,学习了 hub 的使用,但是却没能满足最初的需求:从命令行删除 repository,
不过最后还是找到办法了,需要使用 github 的 API 来操作,参考:
stackoverflow。