Accessing GitHub from the command line
I am always looking for ways to speed up my workflow, using tools to either automatize the tasks or making them easier to perform. Recently I was working on a project in which I had to create several pull requests per day and very often. So I looked for a way to improve this process and I found an awesome tool that helps me do it.
hub is a command-line wrapper for GitHub, it gives you several commands to interact directly with the web interface and also makes some improvements to several git commands.
If you are on a OS X environment (and you have
brew already running), all you need to do is run
brew install hub.
In a Unix-based system you can install it from source with the following commands:
git clone https://github.com/github/hub.git cd hub rake install prefix=/usr/local
Hub will ask you for your GitHub credentials the first time you use it. After that it will use an OAuth token for future calls to the API.
Hub will enhance some git commands, among which is
git init, so let's say you are initializing a new project, then, if you do:
hub init -g
Hub will initialize a new git repository locally. It will create the repo using your GitHub credentials and finally it will add this repository as remote origin.
But, where I think Hub really shines is when you use the custom commands that it adds.
For instance, if you have a git repo already initialized, you can run:
hub create [NAME] [-p] [-d DESCRIPTION] [-h HOMEPAGE]
This will create a new GitHub repository and add it as remote origin, in which
NAME is the name of the repo. If it is omitted, the name of the working directory is taken as the name of the repository.
p is a flag to make the repo private and, well, the other options are pretty descriptive.
You can browse among the subpages of a project using the
hub browse [-u] [[USER/]REPOSITORY] [SUBPAGE]
By default Hub takes the current directory project as the project to browse if you don't specify one. Also, the default subpage is
tree (index), but you can tell Hub the subpage you want to visit. For example, if I'm in the buggy project directory:
#/projects/buggy hub browse
It opens the buggy GitHub page in the default browser.
#/projects/buggy hub browse -- issues
Opens buggy's issues subpage in the browser.
To specify a different page.
#/projects/buggy hub browse ribbit commits
Opens the ribbit commits subpage.
To specify a different user, do:
#/projects/buggy hub browse rails/rails pulls
Which opens the rails pull requests subpage.
-u flag is to display the URL instead of opening the page in the browser.
You can compare branches, tags and SHA1s, by giving a range of one of them.
hub compare [-u] [USER] [[START...]END]
For instance if you want to compare the
feature_a branch with the
feature_b branch, the command will be:
hub compare feature_a...feature_b
This will open a tab on your browser with the comparison of the two specified branches.
If you don't specify a starting point it will take the 'base' branch which by default is
hub compare new_feature
It will open a GitHub compare view of the
new_feature branch against
To create a pull request, use this command:
hub pull-request [-f] [-m MESSAGE|-F FILE|-i ISSUE|ISSUE-URL] [-b BASE] [-h HEAD]
If you don't specify the message with
-m, it will prompt the default editor in which you can put the message and the description for the pull request. In the same way, the
-b option will take
master as the base branch and the
-h will take the current branch as HEAD, so if I'm in the
Will make a pull request from
This command will check if you have local commits that are not yet pushed to the remote, in which case, it will abort the operation. But you can skip this validation by using the
As part of my daily routine, I always have an open terminal tab for my git commands, so Hub fit perfectly and seamlessly. It helped me to make my daily interactions with GitHub faster and easier. If you have a chance, check it out, it's a pretty cool tool.
Thanks for reading.