GithubHelp home page GithubHelp logo

gh's Introduction

g + h = github Build Status

gh

Fast GitHub command line client implemented in Go. Current version is v0.23.0.

Overview

gh is a command line client to GitHub. It's designed to run as fast as possible with easy installation across operating systems. If you like gh, please also take a look at hub. Hub is a reference implementation to gh.

Motivation

Fast

$ time hub version > /dev/null
hub version > /dev/null  0.03s user 0.01s system 93% cpu 0.047 total

$ time gh version > /dev/null
gh version > /dev/null  0.01s user 0.01s system 85% cpu 0.022 total

$ time hub browse > /dev/null
hub browse > /dev/null  0.07s user 0.04s system 87% cpu 0.130 total

$ time gh browse > /dev/null
gh browse > /dev/null  0.03s user 0.02s system 87% cpu 0.059 total

Muti-platforms

gh is fully implemented in the Go language and is designed to run across operating systems.

Easy installation

There're no pre-requirements to install gh. Download the binary and go!

Installation

Homebrew

Installing on OSX is easiest with Homebrew:

$ brew install https://raw.github.com/jingweno/gh/master/homebrew/gh.rb

Standalone

gh is easily installed as an executable. Download the compiled binary forms of gh for Darwin, Linux and Windows.

Source

To compile gh from source, you need to have a Go development environment, version 1.1 or better, and run:

$ go get github.com/jingweno/gh

Note that go get will pull down sources from various VCS. Please make sure you have git and hg installed.

Upgrade

Since gh is under heavy development, I roll out new releases often. Please take a look at the built binaries for the latest built binaries. I plan to implement automatic upgrade in the future.

Homebrew

To upgrade gh on OSX with Homebrew, run:

$ brew upgrade https://raw.github.com/jingweno/gh/master/homebrew/gh.rb

Source

To upgrade gh from source, run:

$ go get -u github.com/jingweno/gh

Aliasing

It's best to use gh by aliasing it to git. All git commands will still work with gh adding some sugar.

gh alias displays instructions for the current shell. With the -s flag, it outputs a script suitable for eval.

You should place this command in your .bash_profile or other startup script:

eval "$(gh alias -s)"

For more details, run gh help alias.

Usage

gh help

$ gh help
[display help for all commands]
$ gh help pull-request
[display help for pull-request]

gh init

$ gh init -g
> git init
> git remote add origin [email protected]:YOUR_USER/REPO.git

gh push

$ gh push origin,staging,qa bert_timeout
> git push origin bert_timeout
> git push staging bert_timeout
> git push qa bert_timeout

$ gh push origin
> git push origin HEAD

gh checkout

$ gh checkout https://github.com/jingweno/gh/pull/35
> git remote add -f -t feature git://github:com/foo/gh.git
> git checkout --track -B foo-feature foo/feature

$ gh checkout https://github.com/jingweno/gh/pull/35 custom-branch-name

gh merge

$ gh merge https://github.com/jingweno/gh/pull/73
> git fetch git://github.com/jingweno/gh.git +refs/heads/feature:refs/remotes/jingweno/feature
> git merge jingweno/feature --no-ff -m 'Merge pull request #73 from jingweno/feature...'

gh clone

$ gh clone jingweno/gh
> git clone git://github.com/jingweno/gh

$ gh clone -p jingweno/gh
> git clone [email protected]:jingweno/gh.git

$ gh clone jekyll_and_hype
> git clone git://github.com/YOUR_LOGIN/jekyll_and_hype.

$ gh clone -p jekyll_and_hype
> git clone [email protected]:YOUR_LOGIN/jekyll_and_hype.git

gh fetch

$ gh fetch jingweno
> git remote add jingweno git://github.com/jingweno/REPO.git
> git fetch jingweno

$ git fetch jingweno,foo
> git remote add jingweno ...
> git remote add foo ...
> git fetch --multiple jingweno foo

$ git fetch --multiple jingweno foo
> git remote add jingweno ...
> git remote add foo ...
> git fetch --multiple jingweno foo

gh cherry-pick

$ gh cherry-pick https://github.com/jingweno/gh/commit/a319d88#comments
> git remote add -f jingweno git://github.com/jingweno/gh.git
> git cherry-pick a319d88

$ gh cherry-pick jingweno@a319d88
> git remote add -f jingweno git://github.com/jingweno/gh.git
> git cherry-pick a319d88

$ gh cherry-pick jingweno@SHA
> git fetch jingweno
> git cherry-pick SHA

gh remote

$ gh remote add jingweno
> git remote add -f jingweno git://github.com/jingweno/CURRENT_REPO.git

$ gh remote add -p jingweno
> git remote add -f jingweno [email protected]:jingweno/CURRENT_REPO.git

$ gh remote add origin
> git remote add -f YOUR_USER git://github.com/YOUR_USER/CURRENT_REPO.git    

gh submodule

$ gh submodule add jingweno/gh vendor/gh
> git submodule add git://github.com/jingweno/gh.git vendor/gh

$ gh submodule add -p jingweno/gh vendor/gh
> git submodule add [email protected]:jingweno/gh.git vendor/gh

$ gh submodule add -b gh --name gh jingweno/gh vendor/gh
> git submodule add -b gh --name gh git://github.com/jingweno/gh.git vendor/gh

gh pull-request

# while on a topic branch called "feature":
$ gh pull-request
[ opens text editor to edit title & body for the request ]
[ opened pull request on GitHub for "YOUR_USER:feature" ]

# explicit pull base & head:
$ gh pull-request -b jingweno:master -h jingweno:feature

$ gh pull-request -i 123
[ attached pull request to issue #123 ]

gh apply

$ gh apply https://github.com/jingweno/gh/pull/55
> curl https://github.com/jingweno/gh/pull/55.patch -o /tmp/55.patch
> git apply /tmp/55.patch

$ git apply --ignore-whitespace https://github.com/jingweno/gh/commit/fdb9921
> curl https://github.com/jingweno/gh/commit/fdb9921.patch -o /tmp/fdb9921.patch
> git apply --ignore-whitespace /tmp/fdb9921.patch

$ git apply https://gist.github.com/8da7fb575debd88c54cf
> curl https://gist.github.com/8da7fb575debd88c54cf.txt -o /tmp/gist-8da7fb575debd88c54cf.txt
> git apply /tmp/gist-8da7fb575debd88c54cf.txt

gh fork

$ gh fork
[ repo forked on GitHub ]
> git remote add -f YOUR_USER [email protected]:YOUR_USER/CURRENT_REPO.git

$ gh fork --no-remote
[ repo forked on GitHub ]

gh create

$ gh create
... create repo on github ...
> git remote add -f origin [email protected]:YOUR_USER/CURRENT_REPO.git

# with description:
$ gh create -d 'It shall be mine, all mine!'

$ gh create recipes
[ repo created on GitHub ]
> git remote add origin [email protected]:YOUR_USER/recipes.git

$ gh create sinatra/recipes
[ repo created in GitHub organization ]
> git remote add origin [email protected]:sinatra/recipes.git

gh ci-status

$ gh ci-status
> (prints CI state of HEAD and exits with appropriate code)
> One of: success (0), error (1), failure (1), pending (2), no status (3)

$ gh ci-status BRANCH
> (prints CI state of BRANCH and exits with appropriate code)
> One of: success (0), error (1), failure (1), pending (2), no status (3)

$ gh ci-status SHA
> (prints CI state of SHA and exits with appropriate code)
> One of: success (0), error (1), failure (1), pending (2), no status (3)

gh browse

$ gh browse
> open https://github.com/YOUR_USER/CURRENT_REPO

$ gh browse commit/SHA
> open https://github.com/YOUR_USER/CURRENT_REPO/commit/SHA

$ gh browse issues
> open https://github.com/YOUR_USER/CURRENT_REPO/issues

$ gh browse -u jingweno -r gh
> open https://github.com/jingweno/gh

$ gh browse -u jingweno -r gh commit/SHA
> open https://github.com/jingweno/gh/commit/SHA

$ gh browse -r resque
> open https://github.com/YOUR_USER/resque

$ gh browse -r resque network
> open https://github.com/YOUR_USER/resque/network

gh compare

$ gh compare refactor
> open https://github.com/CURRENT_REPO/compare/refactor

$ gh compare 1.0..1.1
> open https://github.com/CURRENT_REPO/compare/1.0...1.1

$ gh compare -u other-user patch
> open https://github.com/other-user/REPO/compare/patch

Release Notes

See Releases.

Roadmap

See Issues.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Contributors

See Contributors.

License

gh is released under the MIT license. See LICENSE.md.

gh's People

Contributors

owenthereal avatar tgkokk avatar dgryski avatar jgable avatar joliss avatar jroes avatar samnardoni avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.