git-hub 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY.md +4 -0
- data/README.md +13 -1
- data/Rakefile +1 -0
- data/lib/hub/commands.rb +53 -1
- data/lib/hub/version.rb +1 -1
- data/man/hub.1 +77 -25
- data/man/hub.1.html +64 -47
- data/man/hub.1.ron +35 -18
- data/test/helper.rb +14 -2
- data/test/hub_test.rb +37 -1
- metadata +2 -2
data/HISTORY.md
CHANGED
data/README.md
CHANGED
@@ -125,6 +125,16 @@ superpowers:
|
|
125
125
|
$ git remote add origin
|
126
126
|
> git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git
|
127
127
|
|
128
|
+
### git fork
|
129
|
+
|
130
|
+
$ git fork
|
131
|
+
... hardcore forking action ...
|
132
|
+
> git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
|
133
|
+
|
134
|
+
Forks the original repo on GitHub and adds the new remote under your
|
135
|
+
username. It requires your GitHub token to be present; see "GitHub
|
136
|
+
login" below for details.
|
137
|
+
|
128
138
|
### git init
|
129
139
|
|
130
140
|
$ git init -g
|
@@ -177,7 +187,8 @@ If you see nothing, you need to set the config setting:
|
|
177
187
|
|
178
188
|
$ git config --global github.user YOUR_USER
|
179
189
|
|
180
|
-
|
190
|
+
For commands that require write access to GitHub (such as `fork`), you'll want to
|
191
|
+
setup "github.token" as well. See [local GitHub config guide][2] for more information.
|
181
192
|
|
182
193
|
|
183
194
|
Configuration
|
@@ -243,3 +254,4 @@ Chris Wanstrath :: chris@ozmm.org :: @defunkt
|
|
243
254
|
[0]: http://help.github.com/forking/
|
244
255
|
[1]: http://github.com/defunkt/hub/issues
|
245
256
|
[speed]: http://gist.github.com/284823
|
257
|
+
[2]: http://github.com/guides/local-github-config
|
data/Rakefile
CHANGED
data/lib/hub/commands.rb
CHANGED
@@ -33,11 +33,14 @@ module Hub
|
|
33
33
|
|
34
34
|
# Templates and useful information.
|
35
35
|
USER = `git config --global github.user`.chomp
|
36
|
+
TOKEN = `git config --global github.token`.chomp
|
36
37
|
ORIGIN = `git config remote.origin.url`.chomp
|
37
38
|
HTTP_CLONE = `git config --global hub.http-clone`.chomp == 'yes'
|
38
39
|
PUBLIC = (HTTP_CLONE ? 'http' : 'git') + '://github.com/%s/%s.git'
|
39
40
|
PRIVATE = 'git@github.com:%s/%s.git'
|
40
41
|
LGHCONF = "http://github.com/guides/local-github-config"
|
42
|
+
API_REPO = 'http://github.com/api/v2/yaml/repos/show/%s/%s'
|
43
|
+
API_FORK = 'http://github.com/api/v2/yaml/repos/fork/%s/%s'
|
41
44
|
|
42
45
|
# Set the repo name based on the current origin or, as a fallback,
|
43
46
|
# the cwd.
|
@@ -112,7 +115,7 @@ module Hub
|
|
112
115
|
|
113
116
|
ssh = args.delete('-p')
|
114
117
|
url = ssh ? PRIVATE : PUBLIC
|
115
|
-
|
118
|
+
|
116
119
|
# user/repo
|
117
120
|
args.last =~ /\b(.+?)(?:\/(.+))?$/
|
118
121
|
user, repo = $1, $2 || REPO
|
@@ -147,6 +150,30 @@ module Hub
|
|
147
150
|
end
|
148
151
|
end
|
149
152
|
|
153
|
+
# $ hub fork
|
154
|
+
# ... hardcore forking action ...
|
155
|
+
# > git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
|
156
|
+
def fork(args)
|
157
|
+
require 'net/http'
|
158
|
+
|
159
|
+
# can't do anything without token and original owner name
|
160
|
+
if github_user && github_token && !OWNER.empty?
|
161
|
+
if own_repo_exists?
|
162
|
+
puts "#{github_user}/#{REPO} already exists on GitHub"
|
163
|
+
else
|
164
|
+
fork_repo
|
165
|
+
end
|
166
|
+
|
167
|
+
if args.include?('--no-remote')
|
168
|
+
exit
|
169
|
+
else
|
170
|
+
url = PRIVATE % [ github_user, REPO ]
|
171
|
+
args.replace %W"remote add -f #{github_user} #{url}"
|
172
|
+
args.after { puts "new remote: #{github_user}" }
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
150
177
|
# $ hub push origin,staging cool-feature
|
151
178
|
# > git push origin cool-feature
|
152
179
|
# > git push staging cool-feature
|
@@ -350,6 +377,14 @@ help
|
|
350
377
|
end
|
351
378
|
end
|
352
379
|
|
380
|
+
def github_token
|
381
|
+
if TOKEN.empty?
|
382
|
+
abort "** No GitHub token set. See #{LGHCONF}"
|
383
|
+
else
|
384
|
+
TOKEN
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
353
388
|
# Returns the terminal-formatted manpage, ready to be printed to
|
354
389
|
# the screen.
|
355
390
|
def hub_manpage
|
@@ -433,5 +468,22 @@ help
|
|
433
468
|
write.close
|
434
469
|
end
|
435
470
|
end
|
471
|
+
|
472
|
+
# Determines whether the current user (you) has a fork of the
|
473
|
+
# current repo on GitHub.
|
474
|
+
#
|
475
|
+
# Returns a Boolean.
|
476
|
+
def own_repo_exists?
|
477
|
+
url = API_REPO % [USER, REPO]
|
478
|
+
Net::HTTPSuccess === Net::HTTP.get_response(URI(url))
|
479
|
+
end
|
480
|
+
|
481
|
+
# Forks the current repo using the GitHub API.
|
482
|
+
#
|
483
|
+
# Returns nothing.
|
484
|
+
def fork_repo
|
485
|
+
url = API_FORK % [OWNER, REPO]
|
486
|
+
Net::HTTP.post_form(URI(url), 'login' => USER, 'token' => TOKEN)
|
487
|
+
end
|
436
488
|
end
|
437
489
|
end
|
data/lib/hub/version.rb
CHANGED
data/man/hub.1
CHANGED
@@ -1,30 +1,31 @@
|
|
1
1
|
.\" generated with Ron/v0.3
|
2
2
|
.\" http://github.com/rtomayko/ron/
|
3
3
|
.
|
4
|
-
.TH "HUB" "1" "
|
4
|
+
.TH "HUB" "1" "April 2010" "DEFUNKT" "Git Manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBhub\fR \-\- git + hub = github
|
8
8
|
.
|
9
9
|
.SH "SYNOPSIS"
|
10
|
-
\fBhub\fR \fICOMMAND\fR \fIOPTIONS\fR
|
10
|
+
\fBhub\fR \fICOMMAND\fR \fIOPTIONS\fR \fBhub alias\fR [\fB-s\fR] \fISHELL\fR
|
11
11
|
.
|
12
|
-
.
|
13
|
-
\
|
12
|
+
.P
|
13
|
+
\fBgit init -g\fR \fIOPTIONS\fR
|
14
14
|
.
|
15
15
|
.br
|
16
|
+
\fBgit clone\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR/]\fIREPOSITORY\fR \fIDIRECTORY\fR
|
16
17
|
.
|
17
|
-
.
|
18
|
-
\fBgit
|
18
|
+
.br
|
19
|
+
\fBgit remote add\fR [\fB-p\fR] \fIOPTIONS\fR \fIUSER\fR[/\fIREPOSITORY\fR]
|
19
20
|
.
|
20
21
|
.br
|
21
|
-
\fBgit
|
22
|
+
\fBgit push\fR \fIREMOTE\-1\fR,\fIREMOTE\-2\fR,...,\fIREMOTE\-N\fR \fIREF\fR
|
22
23
|
.
|
23
24
|
.br
|
24
|
-
\fBgit
|
25
|
+
\fBgit fork\fR
|
25
26
|
.
|
26
27
|
.br
|
27
|
-
\fBgit browse\fR [\fB-p\fR] [\fIUSER\fR/]\fIREPOSITORY\fR
|
28
|
+
\fBgit browse\fR [\fB-p\fR] [\fIUSER\fR/]\fIREPOSITORY\fR
|
28
29
|
.
|
29
30
|
.br
|
30
31
|
\fBgit submodule add\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR/]\fIREPOSITORY\fR \fIDIRECTORY\fR
|
@@ -34,53 +35,93 @@
|
|
34
35
|
alias command displays information on configuring your environment:
|
35
36
|
.
|
36
37
|
.TP
|
37
|
-
\fBhub alias\fR [\fB-s\fR] \fISHELL\fR
|
38
|
-
Writes shell aliasing code for \fISHELL\fR (\fBbash\fR, \fBsh\fR, \fBzsh\fR, \fBcsh\fR) to standard output. With the \fB-s\fR option, the output of
|
39
|
-
this command can be evaluated directly within the shell: \fBeval $(hub alias -s bash)\fR
|
38
|
+
\fBhub alias\fR [\fB-s\fR] \fISHELL\fR:
|
40
39
|
.
|
41
|
-
.
|
42
|
-
|
40
|
+
.br
|
41
|
+
Writes shell aliasing code for \fISHELL\fR (\fBbash\fR, \fBsh\fR, \fBzsh\fR, \fBcsh\fR) to standard output. With the \fB-s\fR option, the output of
|
42
|
+
this command can be evaluated directly within the shell
|
43
|
+
\fBeval $(hub alias -s bash)\fR
|
43
44
|
.
|
44
45
|
.TP
|
45
|
-
\fBgit init\fR \fB-g\fR \fIOPTIONS\fR
|
46
|
-
|
47
|
-
|
46
|
+
\fBgit init\fR \fB-g\fR \fIOPTIONS\fR:
|
47
|
+
.
|
48
|
+
.br
|
49
|
+
Create a git repository as with git\-init(1) and add remote \fBorigin\fR at
|
50
|
+
"git@github.com:\fIUSER\fR/\fIREPOSITORY\fR.git"; \fIUSER\fR is your GitHub username and
|
51
|
+
\fIREPOSITORY\fR is the current working directory's basename.
|
52
|
+
|
48
53
|
.
|
49
54
|
.TP
|
50
|
-
\fBgit clone\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR\fB/\fR]\fIREPOSITORY\fR \fIDIRECTORY\fR
|
55
|
+
\fBgit clone\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR\fB/\fR]\fIREPOSITORY\fR \fIDIRECTORY\fR:
|
56
|
+
.
|
57
|
+
.br
|
51
58
|
Clone repository "git://github.com/\fIUSER\fR/\fIREPOSITORY\fR.git" into \fIDIRECTORY\fR as with git\-clone(1). When \fIUSER\fR/ is omitted, assumes
|
52
59
|
your GitHub login. With \fB-p\fR, use private remote
|
53
60
|
"git@github.com:\fIUSER\fR/\fIREPOSITORY\fR.git".
|
61
|
+
|
54
62
|
.
|
55
63
|
.TP
|
56
|
-
\fBgit remote add\fR [\fB-p\fR] \fIOPTIONS\fR \fIUSER\fR[\fB/\fR\fIREPOSITORY\fR]
|
64
|
+
\fBgit remote add\fR [\fB-p\fR] \fIOPTIONS\fR \fIUSER\fR[\fB/\fR\fIREPOSITORY\fR]:
|
65
|
+
.
|
66
|
+
.br
|
57
67
|
Add remote "git://github.com/\fIUSER\fR/\fIREPOSITORY\fR.git" as with
|
58
68
|
git\-remote(1). When /\fIREPOSITORY\fR is omitted, the basename of the
|
59
69
|
current working directory is used. With \fB-p\fR, use private remote
|
60
70
|
"git@github.com:\fIUSER\fR/\fIREPOSITORY\fR.git". If \fIUSER\fR is "origin"
|
61
71
|
then uses your GitHub login.
|
72
|
+
|
62
73
|
.
|
63
74
|
.TP
|
64
|
-
\fBgit push\fR \fIREMOTE\-1\fR,\fIREMOTE\-2\fR,...,\fIREMOTE\-N\fR \fIREF\fR
|
75
|
+
\fBgit push\fR \fIREMOTE\-1\fR,\fIREMOTE\-2\fR,...,\fIREMOTE\-N\fR \fIREF\fR:
|
76
|
+
.
|
77
|
+
.br
|
65
78
|
Push \fIREF\fR to each of \fIREMOTE\-1\fR through \fIREMOTE\-N\fR by executing
|
66
79
|
multiple \fBgit push\fR commands.
|
80
|
+
|
67
81
|
.
|
68
82
|
.TP
|
69
|
-
\fBgit
|
83
|
+
\fBgit fork\fR:
|
84
|
+
.
|
85
|
+
.br
|
86
|
+
Forks the original repo on GitHub and adds the new remote under your
|
87
|
+
username. It requires your GitHub login and token to be present. See
|
88
|
+
CONFIGURATION below.
|
89
|
+
|
90
|
+
.
|
91
|
+
.TP
|
92
|
+
\fBgit browse\fR [\fB-p\fR] [[\fIUSER\fR\fB/\fR]\fIREPOSITORY\fR]:
|
93
|
+
.
|
94
|
+
.br
|
70
95
|
Open repository's GitHub page in the system's default web browser
|
71
96
|
using \fBopen(1)\fR or the \fBBROWSER\fR env variable. Use \fB-p\fR to open a
|
72
97
|
page with https. If the repository isn't specified, \fBbrowse\fR opens
|
73
98
|
the page of the repository found in the current directory.
|
99
|
+
|
74
100
|
.
|
75
101
|
.TP
|
76
|
-
\fBgit submodule add\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR/]\fIREPOSITORY\fR \fIDIRECTORY\fR
|
102
|
+
\fBgit submodule add\fR [\fB-p\fR] \fIOPTIONS\fR [\fIUSER\fR/]\fIREPOSITORY\fR \fIDIRECTORY\fR:
|
103
|
+
.
|
104
|
+
.br
|
77
105
|
Submodule repository "git://github.com/\fIUSER\fR/\fIREPOSITORY\fR.git" into \fIDIRECTORY\fR as with git\-submodule(1). When \fIUSER\fR/ is omitted, assumes
|
78
106
|
your GitHub login. With \fB-p\fR, use private remote
|
79
107
|
"git@github.com:\fIUSER\fR/\fIREPOSITORY\fR.git".
|
108
|
+
|
109
|
+
.
|
110
|
+
.TP
|
111
|
+
\fBgit fork\fR [\fB--no-remote\fR]:
|
112
|
+
.
|
113
|
+
.br
|
114
|
+
Forks the original project (as specified in "origin" remote) on GitHub
|
115
|
+
and adds a new remote named \fIUSER\fR referencing the newly created repo.
|
116
|
+
Requires \fBgithub.token\fR to be set (see CONFIGURATION).
|
117
|
+
|
80
118
|
.
|
81
119
|
.TP
|
82
|
-
\fBgit help\fR
|
120
|
+
\fBgit help\fR:
|
121
|
+
.
|
122
|
+
.br
|
83
123
|
Display enhanced git\-help(1).
|
124
|
+
|
84
125
|
.
|
85
126
|
.SH "CONFIGURATION"
|
86
127
|
Use git\-config(1) to display the currently configured GitHub username:
|
@@ -96,13 +137,14 @@ Use git\-config(1) to display the currently configured GitHub username:
|
|
96
137
|
.IP "" 0
|
97
138
|
.
|
98
139
|
.P
|
99
|
-
Or, set the GitHub username with:
|
140
|
+
Or, set the GitHub username and token with:
|
100
141
|
.
|
101
142
|
.IP "" 4
|
102
143
|
.
|
103
144
|
.nf
|
104
145
|
|
105
|
-
\fB$ git config --global github.user <username>
|
146
|
+
\fB$ git config --global github.user <username>
|
147
|
+
$ git config --global github.token <token> \fR
|
106
148
|
.
|
107
149
|
.fi
|
108
150
|
.
|
@@ -161,6 +203,16 @@ $ git remote add origin
|
|
161
203
|
.
|
162
204
|
.fi
|
163
205
|
.
|
206
|
+
.SS "git fork"
|
207
|
+
.
|
208
|
+
.nf
|
209
|
+
|
210
|
+
\fB$ git fork
|
211
|
+
... hardcore forking action ...
|
212
|
+
> git remote add YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git \fR
|
213
|
+
.
|
214
|
+
.fi
|
215
|
+
.
|
164
216
|
.SS "git init"
|
165
217
|
.
|
166
218
|
.nf
|
data/man/hub.1.html
CHANGED
@@ -66,14 +66,15 @@
|
|
66
66
|
<p><code>hub</code> -- git + hub = github</p>
|
67
67
|
<h2>SYNOPSIS</h2>
|
68
68
|
|
69
|
-
<p><code>hub</code> <var>COMMAND</var> <var>OPTIONS</var>
|
70
|
-
<code>hub alias</code> [<code>-s</code>] <var>SHELL</var>
|
71
|
-
|
72
|
-
|
73
|
-
<
|
74
|
-
<code>git
|
75
|
-
<code>git
|
76
|
-
<code>git
|
69
|
+
<p><code>hub</code> <var>COMMAND</var> <var>OPTIONS</var>
|
70
|
+
<code>hub alias</code> [<code>-s</code>] <var>SHELL</var></p>
|
71
|
+
|
72
|
+
<p><code>git init -g</code> <var>OPTIONS</var><br>
|
73
|
+
<code>git clone</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var>/]<var>REPOSITORY</var> <var>DIRECTORY</var><br>
|
74
|
+
<code>git remote add</code> [<code>-p</code>] <var>OPTIONS</var> <var>USER</var>[/<var>REPOSITORY</var>]<br>
|
75
|
+
<code>git push</code> <var>REMOTE-1</var>,<var>REMOTE-2</var>,...,<var>REMOTE-N</var> <var>REF</var><br>
|
76
|
+
<code>git fork</code><br>
|
77
|
+
<code>git browse</code> [<code>-p</code>] [<var>USER</var>/]<var>REPOSITORY</var><br>
|
77
78
|
<code>git submodule add</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var>/]<var>REPOSITORY</var> <var>DIRECTORY</var></p>
|
78
79
|
|
79
80
|
<h2>DESCRIPTION</h2>
|
@@ -83,59 +84,67 @@ alias command displays information on configuring your environment:</p>
|
|
83
84
|
|
84
85
|
<dl>
|
85
86
|
<dt>
|
86
|
-
<code>hub alias</code> [<code>-s</code>] <var>SHELL</var>
|
87
|
-
</
|
88
|
-
<dd>Writes shell aliasing code for <var>SHELL</var> (<code>bash</code>, <code>sh</code>, <code>zsh</code>,
|
87
|
+
<code>hub alias</code> [<code>-s</code>] <var>SHELL</var>:<br>
|
88
|
+
Writes shell aliasing code for <var>SHELL</var> (<code>bash</code>, <code>sh</code>, <code>zsh</code>,
|
89
89
|
<code>csh</code>) to standard output. With the <code>-s</code> option, the output of
|
90
|
-
this command can be evaluated directly within the shell
|
91
|
-
<code>eval $(hub alias -s bash)</code>
|
92
|
-
</dd>
|
93
|
-
</dl>
|
94
|
-
|
95
|
-
|
96
|
-
<p>After configuring the alias, the following commands have superpowers:</p>
|
97
|
-
|
98
|
-
<dl>
|
90
|
+
this command can be evaluated directly within the shell</dt>
|
91
|
+
<dd><p><code>eval $(hub alias -s bash)</code></p></dd>
|
99
92
|
<dt>
|
100
|
-
<code>git init</code> <code>-g</code> <var>OPTIONS</var>
|
101
|
-
</
|
102
|
-
|
103
|
-
|
104
|
-
<
|
93
|
+
<code>git init</code> <code>-g</code> <var>OPTIONS</var>:<br>
|
94
|
+
Create a git repository as with git-init(1) and add remote <code>origin</code> at
|
95
|
+
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git"; <var>USER</var> is your GitHub username and
|
96
|
+
<var>REPOSITORY</var> is the current working directory's basename.</dt>
|
97
|
+
<dd><p></p></dd>
|
105
98
|
<dt>
|
106
|
-
<code>git clone</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var><code>/</code>]<var>REPOSITORY</var> <var>DIRECTORY</var>
|
107
|
-
</
|
108
|
-
<dd><p>Clone repository "git://github.com/<var>USER</var>/<var>REPOSITORY</var>.git" into
|
99
|
+
<code>git clone</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var><code>/</code>]<var>REPOSITORY</var> <var>DIRECTORY</var>:<br>
|
100
|
+
Clone repository "git://github.com/<var>USER</var>/<var>REPOSITORY</var>.git" into
|
109
101
|
<var>DIRECTORY</var> as with git-clone(1). When <var>USER</var>/ is omitted, assumes
|
110
102
|
your GitHub login. With <code>-p</code>, use private remote
|
111
|
-
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git".</
|
103
|
+
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git".</dt>
|
104
|
+
<dd><p></p></dd>
|
112
105
|
<dt>
|
113
|
-
<code>git remote add</code> [<code>-p</code>] <var>OPTIONS</var> <var>USER</var>[<code>/</code><var>REPOSITORY</var>]
|
114
|
-
|
106
|
+
<code>git remote add</code> [<code>-p</code>] <var>OPTIONS</var> <var>USER</var>[<code>/</code><var>REPOSITORY</var>]:<br>
|
107
|
+
Add remote "git://github.com/<var>USER</var>/<var>REPOSITORY</var>.git" as with
|
115
108
|
git-remote(1). When /<var>REPOSITORY</var> is omitted, the basename of the
|
116
109
|
current working directory is used. With <code>-p</code>, use private remote
|
117
110
|
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git". If <var>USER</var> is "origin"
|
118
|
-
then uses your GitHub login.</
|
111
|
+
then uses your GitHub login.</dt>
|
112
|
+
<dd><p></p></dd>
|
113
|
+
<dt>
|
114
|
+
<code>git push</code> <var>REMOTE-1</var>,<var>REMOTE-2</var>,...,<var>REMOTE-N</var> <var>REF</var>:<br>
|
115
|
+
Push <var>REF</var> to each of <var>REMOTE-1</var> through <var>REMOTE-N</var> by executing
|
116
|
+
multiple <code>git push</code> commands.</dt>
|
117
|
+
<dd><p></p></dd>
|
119
118
|
<dt>
|
120
|
-
<code>git
|
121
|
-
|
122
|
-
|
123
|
-
|
119
|
+
<code>git fork</code>:<br>
|
120
|
+
Forks the original repo on GitHub and adds the new remote under your
|
121
|
+
username. It requires your GitHub login and token to be present. See
|
122
|
+
CONFIGURATION below.</dt>
|
123
|
+
<dd><p></p></dd>
|
124
124
|
<dt>
|
125
|
-
<code>git browse</code> [<code>-p</code>] [[<var>USER</var><code>/</code>]<var>REPOSITORY</var>]
|
126
|
-
|
125
|
+
<code>git browse</code> [<code>-p</code>] [[<var>USER</var><code>/</code>]<var>REPOSITORY</var>]:<br>
|
126
|
+
Open repository's GitHub page in the system's default web browser
|
127
127
|
using <code>open(1)</code> or the <code>BROWSER</code> env variable. Use <code>-p</code> to open a
|
128
128
|
page with https. If the repository isn't specified, <code>browse</code> opens
|
129
|
-
the page of the repository found in the current directory.</
|
129
|
+
the page of the repository found in the current directory.</dt>
|
130
|
+
<dd><p></p></dd>
|
130
131
|
<dt>
|
131
|
-
<code>git submodule add</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var>/]<var>REPOSITORY</var> <var>DIRECTORY</var>
|
132
|
-
</
|
133
|
-
<dd><p>Submodule repository "git://github.com/<var>USER</var>/<var>REPOSITORY</var>.git" into
|
132
|
+
<code>git submodule add</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var>/]<var>REPOSITORY</var> <var>DIRECTORY</var>:<br>
|
133
|
+
Submodule repository "git://github.com/<var>USER</var>/<var>REPOSITORY</var>.git" into
|
134
134
|
<var>DIRECTORY</var> as with git-submodule(1). When <var>USER</var>/ is omitted, assumes
|
135
135
|
your GitHub login. With <code>-p</code>, use private remote
|
136
|
-
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git".</
|
137
|
-
<
|
138
|
-
<
|
136
|
+
"git@github.com:<var>USER</var>/<var>REPOSITORY</var>.git".</dt>
|
137
|
+
<dd><p></p></dd>
|
138
|
+
<dt>
|
139
|
+
<code>git fork</code> [<code>--no-remote</code>]:<br>
|
140
|
+
Forks the original project (as specified in "origin" remote) on GitHub
|
141
|
+
and adds a new remote named <var>USER</var> referencing the newly created repo.
|
142
|
+
Requires <code>github.token</code> to be set (see CONFIGURATION).</dt>
|
143
|
+
<dd><p></p></dd>
|
144
|
+
<dt>
|
145
|
+
<code>git help</code>:<br>
|
146
|
+
Display enhanced git-help(1).</dt>
|
147
|
+
<dd><p></p></dd>
|
139
148
|
</dl>
|
140
149
|
|
141
150
|
|
@@ -146,9 +155,10 @@ your GitHub login. With <code>-p</code>, use private remote
|
|
146
155
|
<pre><code>$ git config --global github.user
|
147
156
|
</code></pre>
|
148
157
|
|
149
|
-
<p>Or, set the GitHub username with:</p>
|
158
|
+
<p>Or, set the GitHub username and token with:</p>
|
150
159
|
|
151
160
|
<pre><code>$ git config --global github.user <username>
|
161
|
+
$ git config --global github.token <token>
|
152
162
|
</code></pre>
|
153
163
|
|
154
164
|
<p>See <a href="http://github.com/guides/local-github-config">http://github.com/guides/local-github-config</a> for more
|
@@ -189,6 +199,13 @@ $ git remote add origin
|
|
189
199
|
> git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git
|
190
200
|
</code></pre>
|
191
201
|
|
202
|
+
<h3>git fork</h3>
|
203
|
+
|
204
|
+
<pre><code>$ git fork
|
205
|
+
... hardcore forking action ...
|
206
|
+
> git remote add YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
|
207
|
+
</code></pre>
|
208
|
+
|
192
209
|
<h3>git init</h3>
|
193
210
|
|
194
211
|
<pre><code>$ git init -g
|
@@ -243,7 +260,7 @@ $ git help hub
|
|
243
260
|
|
244
261
|
<ol class='foot man'>
|
245
262
|
<li class='tl'>DEFUNKT</li>
|
246
|
-
<li class='tc'>
|
263
|
+
<li class='tc'>April 2010</li>
|
247
264
|
<li class='tr'>hub(1)</li>
|
248
265
|
</ol>
|
249
266
|
|
data/man/hub.1.ron
CHANGED
@@ -3,63 +3,73 @@ hub(1) -- git + hub = github
|
|
3
3
|
|
4
4
|
## SYNOPSIS
|
5
5
|
|
6
|
-
`hub` <COMMAND> <OPTIONS>
|
7
|
-
`hub alias` [`-s`] <SHELL>
|
6
|
+
`hub` <COMMAND> <OPTIONS>
|
7
|
+
`hub alias` [`-s`] <SHELL>
|
8
8
|
|
9
|
-
`git init -g` <OPTIONS>
|
10
|
-
`git clone` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>
|
11
|
-
`git remote add` [`-p`] <OPTIONS> <USER>[/<REPOSITORY>]
|
12
|
-
`git
|
13
|
-
`git
|
9
|
+
`git init -g` <OPTIONS>
|
10
|
+
`git clone` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>
|
11
|
+
`git remote add` [`-p`] <OPTIONS> <USER>[/<REPOSITORY>]
|
12
|
+
`git push` <REMOTE-1>,<REMOTE-2>,...,<REMOTE-N> <REF>
|
13
|
+
`git fork`
|
14
|
+
`git browse` [`-p`] [<USER>/]<REPOSITORY>
|
15
|
+
`git submodule add` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>
|
14
16
|
|
15
17
|
## DESCRIPTION
|
16
18
|
|
17
19
|
`hub` enhances various `git` commands with GitHub remote expansion. The
|
18
20
|
alias command displays information on configuring your environment:
|
19
21
|
|
20
|
-
* `hub alias` [`-s`] <SHELL>:
|
22
|
+
* `hub alias` [`-s`] <SHELL>:
|
21
23
|
Writes shell aliasing code for <SHELL> (`bash`, `sh`, `zsh`,
|
22
24
|
`csh`) to standard output. With the `-s` option, the output of
|
23
25
|
this command can be evaluated directly within the shell:
|
24
26
|
`eval $(hub alias -s bash)`
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
* `git init` `-g` <OPTIONS>:
|
28
|
+
* `git init` `-g` <OPTIONS>:
|
29
29
|
Create a git repository as with git-init(1) and add remote `origin` at
|
30
30
|
"git@github.com:<USER>/<REPOSITORY>.git"; <USER> is your GitHub username and
|
31
31
|
<REPOSITORY> is the current working directory's basename.
|
32
32
|
|
33
|
-
* `git clone` [`-p`] <OPTIONS> [<USER>`/`]<REPOSITORY> <DIRECTORY>:
|
33
|
+
* `git clone` [`-p`] <OPTIONS> [<USER>`/`]<REPOSITORY> <DIRECTORY>:
|
34
34
|
Clone repository "git://github.com/<USER>/<REPOSITORY>.git" into
|
35
35
|
<DIRECTORY> as with git-clone(1). When <USER>/ is omitted, assumes
|
36
36
|
your GitHub login. With `-p`, use private remote
|
37
37
|
"git@github.com:<USER>/<REPOSITORY>.git".
|
38
38
|
|
39
|
-
* `git remote add` [`-p`] <OPTIONS> <USER>[`/`<REPOSITORY>]:
|
39
|
+
* `git remote add` [`-p`] <OPTIONS> <USER>[`/`<REPOSITORY>]:
|
40
40
|
Add remote "git://github.com/<USER>/<REPOSITORY>.git" as with
|
41
41
|
git-remote(1). When /<REPOSITORY> is omitted, the basename of the
|
42
42
|
current working directory is used. With `-p`, use private remote
|
43
43
|
"git@github.com:<USER>/<REPOSITORY>.git". If <USER> is "origin"
|
44
44
|
then uses your GitHub login.
|
45
45
|
|
46
|
-
* `git push` <REMOTE-1>,<REMOTE-2>,...,<REMOTE-N> <REF>:
|
46
|
+
* `git push` <REMOTE-1>,<REMOTE-2>,...,<REMOTE-N> <REF>:
|
47
47
|
Push <REF> to each of <REMOTE-1> through <REMOTE-N> by executing
|
48
48
|
multiple `git push` commands.
|
49
49
|
|
50
|
-
* `git
|
50
|
+
* `git fork`:
|
51
|
+
Forks the original repo on GitHub and adds the new remote under your
|
52
|
+
username. It requires your GitHub login and token to be present. See
|
53
|
+
CONFIGURATION below.
|
54
|
+
|
55
|
+
* `git browse` [`-p`] [[<USER>`/`]<REPOSITORY>]:
|
51
56
|
Open repository's GitHub page in the system's default web browser
|
52
57
|
using `open(1)` or the `BROWSER` env variable. Use `-p` to open a
|
53
58
|
page with https. If the repository isn't specified, `browse` opens
|
54
59
|
the page of the repository found in the current directory.
|
55
60
|
|
56
|
-
* `git submodule add` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>:
|
61
|
+
* `git submodule add` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>:
|
57
62
|
Submodule repository "git://github.com/<USER>/<REPOSITORY>.git" into
|
58
63
|
<DIRECTORY> as with git-submodule(1). When <USER>/ is omitted, assumes
|
59
64
|
your GitHub login. With `-p`, use private remote
|
60
65
|
"git@github.com:<USER>/<REPOSITORY>.git".
|
61
66
|
|
62
|
-
* `git
|
67
|
+
* `git fork` [`--no-remote`]:
|
68
|
+
Forks the original project (as specified in "origin" remote) on GitHub
|
69
|
+
and adds a new remote named <USER> referencing the newly created repo.
|
70
|
+
Requires `github.token` to be set (see CONFIGURATION).
|
71
|
+
|
72
|
+
* `git help`:
|
63
73
|
Display enhanced git-help(1).
|
64
74
|
|
65
75
|
## CONFIGURATION
|
@@ -68,9 +78,10 @@ Use git-config(1) to display the currently configured GitHub username:
|
|
68
78
|
|
69
79
|
$ git config --global github.user
|
70
80
|
|
71
|
-
Or, set the GitHub username with:
|
81
|
+
Or, set the GitHub username and token with:
|
72
82
|
|
73
83
|
$ git config --global github.user <username>
|
84
|
+
$ git config --global github.token <token>
|
74
85
|
|
75
86
|
See <http://github.com/guides/local-github-config> for more
|
76
87
|
information.
|
@@ -107,6 +118,12 @@ cloning:
|
|
107
118
|
$ git remote add origin
|
108
119
|
> git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git
|
109
120
|
|
121
|
+
### git fork
|
122
|
+
|
123
|
+
$ git fork
|
124
|
+
... hardcore forking action ...
|
125
|
+
> git remote add YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
|
126
|
+
|
110
127
|
### git init
|
111
128
|
|
112
129
|
$ git init -g
|
data/test/helper.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
require 'test/unit'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'redgreen'
|
5
|
+
rescue LoadError
|
6
|
+
end
|
7
|
+
|
2
8
|
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
3
9
|
require 'hub'
|
4
10
|
require 'hub/standalone'
|
@@ -26,16 +32,22 @@ class Test::Unit::TestCase
|
|
26
32
|
# If a block is given it will be run in the child process before
|
27
33
|
# execution begins. You can use this to monkeypatch or fudge the
|
28
34
|
# environment before running hub.
|
29
|
-
def hub(args)
|
35
|
+
def hub(args, input = nil)
|
30
36
|
parent_read, child_write = IO.pipe
|
37
|
+
child_read, parent_write = IO.pipe if input
|
31
38
|
|
32
39
|
fork do
|
33
40
|
yield if block_given?
|
41
|
+
$stdin.reopen(child_read) if input
|
34
42
|
$stdout.reopen(child_write)
|
35
43
|
$stderr.reopen(child_write)
|
36
44
|
Hub(args).execute
|
37
45
|
end
|
38
|
-
|
46
|
+
|
47
|
+
if input
|
48
|
+
parent_write.write input
|
49
|
+
parent_write.close
|
50
|
+
end
|
39
51
|
child_write.close
|
40
52
|
parent_read.read
|
41
53
|
end
|
data/test/hub_test.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
2
|
require 'helper'
|
3
|
+
require 'webmock/test_unit'
|
3
4
|
|
4
5
|
class HubTest < Test::Unit::TestCase
|
6
|
+
include WebMock
|
7
|
+
|
5
8
|
def setup
|
6
9
|
Hub::Commands::REPO.replace("hub")
|
7
10
|
Hub::Commands::USER.replace("tpw")
|
11
|
+
Hub::Commands::TOKEN.replace("abc123")
|
8
12
|
Hub::Commands::OWNER.replace("defunkt")
|
9
13
|
end
|
10
14
|
|
@@ -197,6 +201,37 @@ class HubTest < Test::Unit::TestCase
|
|
197
201
|
assert_equal "git push staging cool-feature; git push qa cool-feature", h.after
|
198
202
|
end
|
199
203
|
|
204
|
+
def test_fork
|
205
|
+
stub_request(:get, "github.com/api/v2/yaml/repos/show/tpw/hub").
|
206
|
+
to_return(:status => 404)
|
207
|
+
stub_request(:post, "github.com/api/v2/yaml/repos/fork/defunkt/hub").with { |req|
|
208
|
+
params = Hash[*req.body.split(/[&=]/)]
|
209
|
+
params == { 'login'=>'tpw', 'token'=>'abc123' }
|
210
|
+
}
|
211
|
+
|
212
|
+
expected = "remote add -f tpw git@github.com:tpw/hub.git\n"
|
213
|
+
expected << "new remote: tpw\n"
|
214
|
+
assert_equal expected, hub("fork") { ENV['GIT'] = 'echo' }
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_fork_no_remote
|
218
|
+
stub_request(:get, "github.com/api/v2/yaml/repos/show/tpw/hub").
|
219
|
+
to_return(:status => 404)
|
220
|
+
stub_request(:post, "github.com/api/v2/yaml/repos/fork/defunkt/hub")
|
221
|
+
|
222
|
+
assert_equal "", hub("fork --no-remote") { ENV['GIT'] = 'echo' }
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_fork_already_exists
|
226
|
+
stub_request(:get, "github.com/api/v2/yaml/repos/show/tpw/hub").
|
227
|
+
to_return(:status => 200)
|
228
|
+
|
229
|
+
expected = "tpw/hub already exists on GitHub\n"
|
230
|
+
expected << "remote add -f tpw git@github.com:tpw/hub.git\n"
|
231
|
+
expected << "new remote: tpw\n"
|
232
|
+
assert_equal expected, hub("fork") { ENV['GIT'] = 'echo' }
|
233
|
+
end
|
234
|
+
|
200
235
|
def test_version
|
201
236
|
out = hub('--version')
|
202
237
|
assert_includes "git version", out
|
@@ -244,7 +279,8 @@ config
|
|
244
279
|
end
|
245
280
|
|
246
281
|
def test_hub_open_private
|
247
|
-
assert_command "browse -p bmizerany/sinatra",
|
282
|
+
assert_command "browse -p bmizerany/sinatra",
|
283
|
+
"open https://github.com/bmizerany/sinatra"
|
248
284
|
end
|
249
285
|
|
250
286
|
def test_hub_open_self
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-hub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wanstrath
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-04-07 00:00:00 -07:00
|
13
13
|
default_executable: hub
|
14
14
|
dependencies: []
|
15
15
|
|