README.md 9.3 KB
Newer Older
M
Mislav Marohnić 已提交
1 2
git + hub = github
==================
C
readme  
Chris Wanstrath 已提交
3

M
Mislav Marohnić 已提交
4 5
hub is a command line tool that wraps `git` in order to extend it with extra
features and commands that make working with GitHub easier.
C
readme  
Chris Wanstrath 已提交
6

M
Mislav Marohnić 已提交
7 8
~~~ sh
$ hub clone rtomayko/tilt
C
readme  
Chris Wanstrath 已提交
9

M
Mislav Marohnić 已提交
10 11 12
# expands to:
$ git clone git://github.com/rtomayko/tilt.git
~~~
C
Chris Wanstrath 已提交
13

M
Mislav Marohnić 已提交
14 15
hub is best aliased as `git`, so you can type `$ git <command>` in the shell and
get all the usual `hub` features. See "Aliasing" below.
C
tweak  
Chris Wanstrath 已提交
16

C
Chris Wanstrath 已提交
17

M
Mislav Marohnić 已提交
18 19
Installation
------------
C
Chris Wanstrath 已提交
20

M
Mislav Marohnić 已提交
21
Dependencies:
C
Chris Wanstrath 已提交
22

M
Mislav Marohnić 已提交
23
* **git 1.7.3** or newer
C
tweak  
Chris Wanstrath 已提交
24

O
Owen Ou 已提交
25 26 27 28 29
### 2.x

Starting from 2.2.0, `hub` is [powered by Go](https://github.com/github/hub/issues/475).
It should maintain a high backward compatibility with 1.x. Note that 2.x is in preview.

30 31 32 33 34 35 36 37 38
#### Homebrew

`hub` 2.x can be installed through Homebrew. Since it's in preview, you need to compile
from HEAD:

~~~ sh
$ brew install --HEAD hub
~~~

O
Owen Ou 已提交
39 40 41
#### Standalone

`hub` 2.x can be easily installed as an executable. Download the latest
42 43
[compiled binaries](https://github.com/github/hub/releases) and put it anywhere
in your executable path.
O
Owen Ou 已提交
44 45 46 47

#### Source

To install `hub` 2.x from source, you need to have a [Go development environment](http://golang.org/doc/install),
J
Jingwen Owen Ou 已提交
48
version 1.4 or better:
O
Owen Ou 已提交
49 50 51 52 53 54 55 56

~~~ sh
$ git clone https://github.com/github/hub.git
$ cd hub
$ ./script/build
$ cp hub YOUR_BIN_PATH
~~~

57 58 59 60 61 62 63
Or, if you've done Go development before and your $GOPATH/bin
directory is already in your PATH:

~~~ sh
$ go get github.com/github/hub
~~~

O
Owen Ou 已提交
64 65 66
### 1.x

#### Homebrew
C
tweaks  
Chris Wanstrath 已提交
67

M
Mislav Marohnić 已提交
68
Installing on OS X is easiest with Homebrew:
C
readme  
Chris Wanstrath 已提交
69

M
Mislav Marohnić 已提交
70 71 72
~~~ sh
$ brew install hub
~~~
C
readme  
Chris Wanstrath 已提交
73

74
Now you should be ready to roll:
C
Chris Wanstrath 已提交
75

M
Mislav Marohnić 已提交
76 77 78 79 80
~~~ sh
$ hub version
git version 1.7.6
hub version 1.8.3
~~~
81

C
readme  
Chris Wanstrath 已提交
82

C
Chris Wanstrath 已提交
83 84
Aliasing
--------
C
readme  
Chris Wanstrath 已提交
85

M
Mislav Marohnić 已提交
86 87
Using hub feels best when it's aliased as `git`. This is not dangerous; your
_normal git commands will all work_. hub merely adds some sugar.
C
readme  
Chris Wanstrath 已提交
88

89 90
`hub alias` displays instructions for the current shell. With the `-s` flag, it
outputs a script suitable for `eval`.
C
Chris Wanstrath 已提交
91

92
You should place this command in your `.bash_profile` or other startup script:
C
Chris Wanstrath 已提交
93

M
Mislav Marohnić 已提交
94
~~~ sh
95
eval "$(hub alias -s)"
M
Mislav Marohnić 已提交
96
~~~
C
tweaks  
Chris Wanstrath 已提交
97

98 99 100 101 102
### Shell tab-completion

hub repository contains tab-completion scripts for bash and zsh. These scripts
complement existing completion scripts that ship with git.

M
Mislav Marohnić 已提交
103 104
* [hub bash completion](https://github.com/github/hub/blob/master/etc/hub.bash_completion.sh)
* [hub zsh completion](https://github.com/github/hub/blob/master/etc/hub.zsh_completion)
105

C
readme  
Chris Wanstrath 已提交
106

C
Chris Wanstrath 已提交
107
Commands
C
readme  
Chris Wanstrath 已提交
108 109
--------

M
Mislav Marohnić 已提交
110
Assuming you've aliased hub as `git`, the following commands now have
C
Chris Wanstrath 已提交
111 112
superpowers:

C
readme  
Chris Wanstrath 已提交
113 114 115
### git clone

    $ git clone schacon/ticgit
C
Chris Wanstrath 已提交
116 117
    > git clone git://github.com/schacon/ticgit.git

C
readme  
Chris Wanstrath 已提交
118
    $ git clone -p schacon/ticgit
C
Chris Wanstrath 已提交
119
    > git clone git@github.com:schacon/ticgit.git
C
readme  
Chris Wanstrath 已提交
120

121
    $ git clone resque
122
    > git clone git@github.com/YOUR_USER/resque.git
123

C
readme  
Chris Wanstrath 已提交
124 125 126
### git remote add

    $ git remote add rtomayko
C
Chris Wanstrath 已提交
127 128
    > git remote add rtomayko git://github.com/rtomayko/CURRENT_REPO.git

K
Konstantin Haase 已提交
129
    $ git remote add -p rtomayko
C
Chris Wanstrath 已提交
130
    > git remote add rtomayko git@github.com:rtomayko/CURRENT_REPO.git
C
readme  
Chris Wanstrath 已提交
131

132 133 134
    $ git remote add origin
    > git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git

135 136 137 138 139 140 141 142 143 144 145
### git fetch

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

    $ git fetch mislav,xoebus
    > git remote add mislav ...
    > git remote add xoebus ...
    > git fetch --multiple mislav xoebus

146 147 148 149 150 151 152 153 154 155 156 157 158 159
### git cherry-pick

    $ git cherry-pick http://github.com/mislav/REPO/commit/SHA
    > git remote add -f mislav git://github.com/mislav/REPO.git
    > git cherry-pick SHA

    $ git cherry-pick mislav@SHA
    > git remote add -f mislav git://github.com/mislav/CURRENT_REPO.git
    > git cherry-pick SHA

    $ git cherry-pick mislav@SHA
    > git fetch mislav
    > git cherry-pick SHA

160
### git am, git apply
161 162

    $ git am https://github.com/defunkt/hub/pull/55
163
    [ downloads patch via API ]
164 165 166
    > git am /tmp/55.patch

    $ git am --ignore-whitespace https://github.com/davidbalbert/hub/commit/fdb9921
167
    [ downloads patch via API ]
168 169
    > git am --ignore-whitespace /tmp/fdb9921.patch

170
    $ git apply https://gist.github.com/8da7fb575debd88c54cf
171
    [ downloads patch via API ]
172 173
    > git apply /tmp/gist-8da7fb575debd88c54cf.txt

174 175 176
### git fork

    $ git fork
177
    [ repo forked on GitHub ]
C
Chris Wanstrath 已提交
178
    > git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
179

180 181
### git pull-request

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

187
    # explicit title, pull base & head:
188
    $ git pull-request -m "Implemented feature X" -b defunkt:master -h mislav:feature
189

190 191
### git checkout

192
    $ git checkout https://github.com/defunkt/hub/pull/73
193
    > git remote add -f -t feature mislav git://github.com/mislav/hub.git
194
    > git checkout --track -B mislav-feature mislav/feature
195

196 197 198 199 200 201 202
    $ git checkout https://github.com/defunkt/hub/pull/73 custom-branch-name

### git merge

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

204 205 206
### git create

    $ git create
207
    [ repo created on GitHub ]
208 209
    > git remote add origin git@github.com:YOUR_USER/CURRENT_REPO.git

210 211 212 213 214 215 216 217 218 219 220
    # with description:
    $ git create -d 'It shall be mine, all mine!'

    $ git create recipes
    [ repo created on GitHub ]
    > git remote add origin git@github.com:YOUR_USER/recipes.git

    $ git create sinatra/recipes
    [ repo created in GitHub organization ]
    > git remote add origin git@github.com:sinatra/recipes.git

C
readme  
Chris Wanstrath 已提交
221 222
### git init

C
Chris Wanstrath 已提交
223
    $ git init -g
C
Chris Wanstrath 已提交
224
    > git init
225
    > git remote add origin git@github.com:YOUR_USER/REPO.git
C
Chris Wanstrath 已提交
226

227 228 229 230 231 232 233
### git push

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

234 235
### git browse

236
    $ git browse
J
Justin Quick 已提交
237
    > open https://github.com/YOUR_USER/CURRENT_REPO
238

239 240 241
    $ git browse -- commit/SHA
    > open https://github.com/YOUR_USER/CURRENT_REPO/commit/SHA

242
    $ git browse -- issues
J
Justin Quick 已提交
243
    > open https://github.com/YOUR_USER/CURRENT_REPO/issues
244

R
Richard Littauer 已提交
245 246 247
    $ git browse -- issues/10
    > open https://github.com/YOUR_USER/CURRENT_REPO/issues/10

248
    $ git browse schacon/ticgit
249
    > open https://github.com/schacon/ticgit
250

251 252 253
    $ git browse schacon/ticgit commit/SHA
    > open https://github.com/schacon/ticgit/commit/SHA

254
    $ git browse resque
255
    > open https://github.com/YOUR_USER/resque
256

257
    $ git browse resque network
258
    > open https://github.com/YOUR_USER/resque/network
259

J
Joshua Roesslein 已提交
260 261 262
### git compare

    $ git compare refactor
263
    > open https://github.com/CURRENT_REPO/compare/refactor
J
Joshua Roesslein 已提交
264

265
    $ git compare 1.0..1.1
266
    > open https://github.com/CURRENT_REPO/compare/1.0...1.1
J
Joshua Roesslein 已提交
267 268

    $ git compare -u fix
269
    > (https://github.com/CURRENT_REPO/compare/fix)
J
Joshua Roesslein 已提交
270

271
    $ git compare other-user patch
272
    > open https://github.com/other-user/REPO/compare/patch
J
Joshua Roesslein 已提交
273

J
Justin Ridgewell 已提交
274
### git submodule
275

276
    $ git submodule add wycats/bundler vendor/bundler
J
Justin Ridgewell 已提交
277 278
    > git submodule add git://github.com/wycats/bundler.git vendor/bundler

279
    $ git submodule add -p wycats/bundler vendor/bundler
J
Justin Ridgewell 已提交
280 281
    > git submodule add git@github.com:wycats/bundler.git vendor/bundler

282
    $ git submodule add -b ryppl --name pip ryppl/pip vendor/pip
283
    > git submodule add -b ryppl --name pip git://github.com/ryppl/pip.git vendor/pip
J
Justin Ridgewell 已提交
284

285 286
### git ci-status

287
    $ git ci-status [commit]
M
Mislav Marohnić 已提交
288
    > (prints CI state of commit and exits with appropriate code)
289 290
    > One of: success (0), error (1), failure (1), pending (2), no status (3)

J
Justin Ridgewell 已提交
291

C
Chris Wanstrath 已提交
292 293 294 295
### git help

    $ git help
    > (improved git help)
C
Chris Wanstrath 已提交
296 297
    $ git help hub
    > (hub man page)
C
readme  
Chris Wanstrath 已提交
298 299


M
Mislav Marohnić 已提交
300 301 302
Configuration
-------------

303
### GitHub OAuth authentication
C
Chris Wanstrath 已提交
304

305 306
Hub will prompt for GitHub username & password the first time it needs to access
the API and exchange it for an OAuth token, which it saves in "~/.config/hub".
C
Chris Wanstrath 已提交
307

308 309 310
To avoid being prompted, use **GITHUB_USER** and **GITHUB_PASSWORD** environment
variables.

B
Bruno Binet 已提交
311
### HTTPS instead of git protocol
C
Chris Wanstrath 已提交
312

313 314 315 316
If you prefer the HTTPS protocol for GitHub repositories, you can set
"hub.protocol" to "https". This will affect `clone`, `fork`, `remote add`
and other operations that expand references to GitHub repositories as full
URLs that otherwise use git and ssh protocols.
317 318 319

"hub.protocol" only applies when the "OWNER/REPO" shorthand is used instead of
a full git URL.
C
Chris Wanstrath 已提交
320

321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
    # default behavior
    $ git clone defunkt/repl
    < git clone >

    # opt into HTTPS:
    $ git config --global hub.protocol https
    $ git clone defunkt/repl
    < https clone >

### GitHub Enterprise

By default, hub will only work with repositories that have remotes which
point to github.com. GitHub Enterprise hosts need to be whitelisted to
configure hub to treat such remotes same as github.com:

    $ git config --global --add hub.host my.git.org

The default host for commands like `init` and `clone` is still
339
github.com, but this can be affected with the `GITHUB_HOST` environment
340
variable:
C
readme  
Chris Wanstrath 已提交
341

342
    $ GITHUB_HOST=my.git.org git clone myproject
C
readme  
Chris Wanstrath 已提交
343

C
Chris Wanstrath 已提交
344 345
Meta
----
C
readme  
Chris Wanstrath 已提交
346

M
Mislav Marohnić 已提交
347 348 349
* Home: <https://github.com/github/hub>
* Bugs: <https://github.com/github/hub/issues>
* Authors: <https://github.com/github/hub/contributors>
M
Mislav Marohnić 已提交
350 351

### Prior art
C
Chris Wanstrath 已提交
352

M
Mislav Marohnić 已提交
353 354
These projects also aim to either improve git or make interacting with
GitHub simpler:
C
Chris Wanstrath 已提交
355

356
* [hub in Ruby](https://github.com/github/hub/tree/1.12-stable) (previous implementation)
M
Mislav Marohnić 已提交
357 358
* [eg](http://www.gnome.org/~newren/eg/)
* [github-gem](https://github.com/defunkt/github-gem)