git-multi 1.0.3 → 1.0.4
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/Rakefile +21 -0
- data/exe/git-multi +1 -0
- data/lib/git/multi/commands.rb +5 -10
- data/lib/git/multi/version.rb +1 -1
- data/lib/git/multi.rb +2 -1
- data/man/git-multi.1 +551 -0
- data/{doc/git-multi.txt → man/git-multi.erb} +15 -8
- data/man/git-multi.html +1186 -0
- metadata +5 -3
data/man/git-multi.html
ADDED
@@ -0,0 +1,1186 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
7
|
+
<meta name="generator" content="AsciiDoc 8.6.10" />
|
8
|
+
<title>git-multi(1)</title>
|
9
|
+
<style type="text/css">
|
10
|
+
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
11
|
+
|
12
|
+
/* Default font. */
|
13
|
+
body {
|
14
|
+
font-family: Georgia,serif;
|
15
|
+
}
|
16
|
+
|
17
|
+
/* Title font. */
|
18
|
+
h1, h2, h3, h4, h5, h6,
|
19
|
+
div.title, caption.title,
|
20
|
+
thead, p.table.header,
|
21
|
+
#toctitle,
|
22
|
+
#author, #revnumber, #revdate, #revremark,
|
23
|
+
#footer {
|
24
|
+
font-family: Arial,Helvetica,sans-serif;
|
25
|
+
}
|
26
|
+
|
27
|
+
body {
|
28
|
+
margin: 1em 5% 1em 5%;
|
29
|
+
}
|
30
|
+
|
31
|
+
a {
|
32
|
+
color: blue;
|
33
|
+
text-decoration: underline;
|
34
|
+
}
|
35
|
+
a:visited {
|
36
|
+
color: fuchsia;
|
37
|
+
}
|
38
|
+
|
39
|
+
em {
|
40
|
+
font-style: italic;
|
41
|
+
color: navy;
|
42
|
+
}
|
43
|
+
|
44
|
+
strong {
|
45
|
+
font-weight: bold;
|
46
|
+
color: #083194;
|
47
|
+
}
|
48
|
+
|
49
|
+
h1, h2, h3, h4, h5, h6 {
|
50
|
+
color: #527bbd;
|
51
|
+
margin-top: 1.2em;
|
52
|
+
margin-bottom: 0.5em;
|
53
|
+
line-height: 1.3;
|
54
|
+
}
|
55
|
+
|
56
|
+
h1, h2, h3 {
|
57
|
+
border-bottom: 2px solid silver;
|
58
|
+
}
|
59
|
+
h2 {
|
60
|
+
padding-top: 0.5em;
|
61
|
+
}
|
62
|
+
h3 {
|
63
|
+
float: left;
|
64
|
+
}
|
65
|
+
h3 + * {
|
66
|
+
clear: left;
|
67
|
+
}
|
68
|
+
h5 {
|
69
|
+
font-size: 1.0em;
|
70
|
+
}
|
71
|
+
|
72
|
+
div.sectionbody {
|
73
|
+
margin-left: 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
hr {
|
77
|
+
border: 1px solid silver;
|
78
|
+
}
|
79
|
+
|
80
|
+
p {
|
81
|
+
margin-top: 0.5em;
|
82
|
+
margin-bottom: 0.5em;
|
83
|
+
}
|
84
|
+
|
85
|
+
ul, ol, li > p {
|
86
|
+
margin-top: 0;
|
87
|
+
}
|
88
|
+
ul > li { color: #aaa; }
|
89
|
+
ul > li > * { color: black; }
|
90
|
+
|
91
|
+
.monospaced, code, pre {
|
92
|
+
font-family: "Courier New", Courier, monospace;
|
93
|
+
font-size: inherit;
|
94
|
+
color: navy;
|
95
|
+
padding: 0;
|
96
|
+
margin: 0;
|
97
|
+
}
|
98
|
+
pre {
|
99
|
+
white-space: pre-wrap;
|
100
|
+
}
|
101
|
+
|
102
|
+
#author {
|
103
|
+
color: #527bbd;
|
104
|
+
font-weight: bold;
|
105
|
+
font-size: 1.1em;
|
106
|
+
}
|
107
|
+
#email {
|
108
|
+
}
|
109
|
+
#revnumber, #revdate, #revremark {
|
110
|
+
}
|
111
|
+
|
112
|
+
#footer {
|
113
|
+
font-size: small;
|
114
|
+
border-top: 2px solid silver;
|
115
|
+
padding-top: 0.5em;
|
116
|
+
margin-top: 4.0em;
|
117
|
+
}
|
118
|
+
#footer-text {
|
119
|
+
float: left;
|
120
|
+
padding-bottom: 0.5em;
|
121
|
+
}
|
122
|
+
#footer-badges {
|
123
|
+
float: right;
|
124
|
+
padding-bottom: 0.5em;
|
125
|
+
}
|
126
|
+
|
127
|
+
#preamble {
|
128
|
+
margin-top: 1.5em;
|
129
|
+
margin-bottom: 1.5em;
|
130
|
+
}
|
131
|
+
div.imageblock, div.exampleblock, div.verseblock,
|
132
|
+
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
|
133
|
+
div.admonitionblock {
|
134
|
+
margin-top: 1.0em;
|
135
|
+
margin-bottom: 1.5em;
|
136
|
+
}
|
137
|
+
div.admonitionblock {
|
138
|
+
margin-top: 2.0em;
|
139
|
+
margin-bottom: 2.0em;
|
140
|
+
margin-right: 10%;
|
141
|
+
color: #606060;
|
142
|
+
}
|
143
|
+
|
144
|
+
div.content { /* Block element content. */
|
145
|
+
padding: 0;
|
146
|
+
}
|
147
|
+
|
148
|
+
/* Block element titles. */
|
149
|
+
div.title, caption.title {
|
150
|
+
color: #527bbd;
|
151
|
+
font-weight: bold;
|
152
|
+
text-align: left;
|
153
|
+
margin-top: 1.0em;
|
154
|
+
margin-bottom: 0.5em;
|
155
|
+
}
|
156
|
+
div.title + * {
|
157
|
+
margin-top: 0;
|
158
|
+
}
|
159
|
+
|
160
|
+
td div.title:first-child {
|
161
|
+
margin-top: 0.0em;
|
162
|
+
}
|
163
|
+
div.content div.title:first-child {
|
164
|
+
margin-top: 0.0em;
|
165
|
+
}
|
166
|
+
div.content + div.title {
|
167
|
+
margin-top: 0.0em;
|
168
|
+
}
|
169
|
+
|
170
|
+
div.sidebarblock > div.content {
|
171
|
+
background: #ffffee;
|
172
|
+
border: 1px solid #dddddd;
|
173
|
+
border-left: 4px solid #f0f0f0;
|
174
|
+
padding: 0.5em;
|
175
|
+
}
|
176
|
+
|
177
|
+
div.listingblock > div.content {
|
178
|
+
border: 1px solid #dddddd;
|
179
|
+
border-left: 5px solid #f0f0f0;
|
180
|
+
background: #f8f8f8;
|
181
|
+
padding: 0.5em;
|
182
|
+
}
|
183
|
+
|
184
|
+
div.quoteblock, div.verseblock {
|
185
|
+
padding-left: 1.0em;
|
186
|
+
margin-left: 1.0em;
|
187
|
+
margin-right: 10%;
|
188
|
+
border-left: 5px solid #f0f0f0;
|
189
|
+
color: #888;
|
190
|
+
}
|
191
|
+
|
192
|
+
div.quoteblock > div.attribution {
|
193
|
+
padding-top: 0.5em;
|
194
|
+
text-align: right;
|
195
|
+
}
|
196
|
+
|
197
|
+
div.verseblock > pre.content {
|
198
|
+
font-family: inherit;
|
199
|
+
font-size: inherit;
|
200
|
+
}
|
201
|
+
div.verseblock > div.attribution {
|
202
|
+
padding-top: 0.75em;
|
203
|
+
text-align: left;
|
204
|
+
}
|
205
|
+
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
|
206
|
+
div.verseblock + div.attribution {
|
207
|
+
text-align: left;
|
208
|
+
}
|
209
|
+
|
210
|
+
div.admonitionblock .icon {
|
211
|
+
vertical-align: top;
|
212
|
+
font-size: 1.1em;
|
213
|
+
font-weight: bold;
|
214
|
+
text-decoration: underline;
|
215
|
+
color: #527bbd;
|
216
|
+
padding-right: 0.5em;
|
217
|
+
}
|
218
|
+
div.admonitionblock td.content {
|
219
|
+
padding-left: 0.5em;
|
220
|
+
border-left: 3px solid #dddddd;
|
221
|
+
}
|
222
|
+
|
223
|
+
div.exampleblock > div.content {
|
224
|
+
border-left: 3px solid #dddddd;
|
225
|
+
padding-left: 0.5em;
|
226
|
+
}
|
227
|
+
|
228
|
+
div.imageblock div.content { padding-left: 0; }
|
229
|
+
span.image img { border-style: none; vertical-align: text-bottom; }
|
230
|
+
a.image:visited { color: white; }
|
231
|
+
|
232
|
+
dl {
|
233
|
+
margin-top: 0.8em;
|
234
|
+
margin-bottom: 0.8em;
|
235
|
+
}
|
236
|
+
dt {
|
237
|
+
margin-top: 0.5em;
|
238
|
+
margin-bottom: 0;
|
239
|
+
font-style: normal;
|
240
|
+
color: navy;
|
241
|
+
}
|
242
|
+
dd > *:first-child {
|
243
|
+
margin-top: 0.1em;
|
244
|
+
}
|
245
|
+
|
246
|
+
ul, ol {
|
247
|
+
list-style-position: outside;
|
248
|
+
}
|
249
|
+
ol.arabic {
|
250
|
+
list-style-type: decimal;
|
251
|
+
}
|
252
|
+
ol.loweralpha {
|
253
|
+
list-style-type: lower-alpha;
|
254
|
+
}
|
255
|
+
ol.upperalpha {
|
256
|
+
list-style-type: upper-alpha;
|
257
|
+
}
|
258
|
+
ol.lowerroman {
|
259
|
+
list-style-type: lower-roman;
|
260
|
+
}
|
261
|
+
ol.upperroman {
|
262
|
+
list-style-type: upper-roman;
|
263
|
+
}
|
264
|
+
|
265
|
+
div.compact ul, div.compact ol,
|
266
|
+
div.compact p, div.compact p,
|
267
|
+
div.compact div, div.compact div {
|
268
|
+
margin-top: 0.1em;
|
269
|
+
margin-bottom: 0.1em;
|
270
|
+
}
|
271
|
+
|
272
|
+
tfoot {
|
273
|
+
font-weight: bold;
|
274
|
+
}
|
275
|
+
td > div.verse {
|
276
|
+
white-space: pre;
|
277
|
+
}
|
278
|
+
|
279
|
+
div.hdlist {
|
280
|
+
margin-top: 0.8em;
|
281
|
+
margin-bottom: 0.8em;
|
282
|
+
}
|
283
|
+
div.hdlist tr {
|
284
|
+
padding-bottom: 15px;
|
285
|
+
}
|
286
|
+
dt.hdlist1.strong, td.hdlist1.strong {
|
287
|
+
font-weight: bold;
|
288
|
+
}
|
289
|
+
td.hdlist1 {
|
290
|
+
vertical-align: top;
|
291
|
+
font-style: normal;
|
292
|
+
padding-right: 0.8em;
|
293
|
+
color: navy;
|
294
|
+
}
|
295
|
+
td.hdlist2 {
|
296
|
+
vertical-align: top;
|
297
|
+
}
|
298
|
+
div.hdlist.compact tr {
|
299
|
+
margin: 0;
|
300
|
+
padding-bottom: 0;
|
301
|
+
}
|
302
|
+
|
303
|
+
.comment {
|
304
|
+
background: yellow;
|
305
|
+
}
|
306
|
+
|
307
|
+
.footnote, .footnoteref {
|
308
|
+
font-size: 0.8em;
|
309
|
+
}
|
310
|
+
|
311
|
+
span.footnote, span.footnoteref {
|
312
|
+
vertical-align: super;
|
313
|
+
}
|
314
|
+
|
315
|
+
#footnotes {
|
316
|
+
margin: 20px 0 20px 0;
|
317
|
+
padding: 7px 0 0 0;
|
318
|
+
}
|
319
|
+
|
320
|
+
#footnotes div.footnote {
|
321
|
+
margin: 0 0 5px 0;
|
322
|
+
}
|
323
|
+
|
324
|
+
#footnotes hr {
|
325
|
+
border: none;
|
326
|
+
border-top: 1px solid silver;
|
327
|
+
height: 1px;
|
328
|
+
text-align: left;
|
329
|
+
margin-left: 0;
|
330
|
+
width: 20%;
|
331
|
+
min-width: 100px;
|
332
|
+
}
|
333
|
+
|
334
|
+
div.colist td {
|
335
|
+
padding-right: 0.5em;
|
336
|
+
padding-bottom: 0.3em;
|
337
|
+
vertical-align: top;
|
338
|
+
}
|
339
|
+
div.colist td img {
|
340
|
+
margin-top: 0.3em;
|
341
|
+
}
|
342
|
+
|
343
|
+
@media print {
|
344
|
+
#footer-badges { display: none; }
|
345
|
+
}
|
346
|
+
|
347
|
+
#toc {
|
348
|
+
margin-bottom: 2.5em;
|
349
|
+
}
|
350
|
+
|
351
|
+
#toctitle {
|
352
|
+
color: #527bbd;
|
353
|
+
font-size: 1.1em;
|
354
|
+
font-weight: bold;
|
355
|
+
margin-top: 1.0em;
|
356
|
+
margin-bottom: 0.1em;
|
357
|
+
}
|
358
|
+
|
359
|
+
div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
|
360
|
+
margin-top: 0;
|
361
|
+
margin-bottom: 0;
|
362
|
+
}
|
363
|
+
div.toclevel2 {
|
364
|
+
margin-left: 2em;
|
365
|
+
font-size: 0.9em;
|
366
|
+
}
|
367
|
+
div.toclevel3 {
|
368
|
+
margin-left: 4em;
|
369
|
+
font-size: 0.9em;
|
370
|
+
}
|
371
|
+
div.toclevel4 {
|
372
|
+
margin-left: 6em;
|
373
|
+
font-size: 0.9em;
|
374
|
+
}
|
375
|
+
|
376
|
+
span.aqua { color: aqua; }
|
377
|
+
span.black { color: black; }
|
378
|
+
span.blue { color: blue; }
|
379
|
+
span.fuchsia { color: fuchsia; }
|
380
|
+
span.gray { color: gray; }
|
381
|
+
span.green { color: green; }
|
382
|
+
span.lime { color: lime; }
|
383
|
+
span.maroon { color: maroon; }
|
384
|
+
span.navy { color: navy; }
|
385
|
+
span.olive { color: olive; }
|
386
|
+
span.purple { color: purple; }
|
387
|
+
span.red { color: red; }
|
388
|
+
span.silver { color: silver; }
|
389
|
+
span.teal { color: teal; }
|
390
|
+
span.white { color: white; }
|
391
|
+
span.yellow { color: yellow; }
|
392
|
+
|
393
|
+
span.aqua-background { background: aqua; }
|
394
|
+
span.black-background { background: black; }
|
395
|
+
span.blue-background { background: blue; }
|
396
|
+
span.fuchsia-background { background: fuchsia; }
|
397
|
+
span.gray-background { background: gray; }
|
398
|
+
span.green-background { background: green; }
|
399
|
+
span.lime-background { background: lime; }
|
400
|
+
span.maroon-background { background: maroon; }
|
401
|
+
span.navy-background { background: navy; }
|
402
|
+
span.olive-background { background: olive; }
|
403
|
+
span.purple-background { background: purple; }
|
404
|
+
span.red-background { background: red; }
|
405
|
+
span.silver-background { background: silver; }
|
406
|
+
span.teal-background { background: teal; }
|
407
|
+
span.white-background { background: white; }
|
408
|
+
span.yellow-background { background: yellow; }
|
409
|
+
|
410
|
+
span.big { font-size: 2em; }
|
411
|
+
span.small { font-size: 0.6em; }
|
412
|
+
|
413
|
+
span.underline { text-decoration: underline; }
|
414
|
+
span.overline { text-decoration: overline; }
|
415
|
+
span.line-through { text-decoration: line-through; }
|
416
|
+
|
417
|
+
div.unbreakable { page-break-inside: avoid; }
|
418
|
+
|
419
|
+
|
420
|
+
/*
|
421
|
+
* xhtml11 specific
|
422
|
+
*
|
423
|
+
* */
|
424
|
+
|
425
|
+
div.tableblock {
|
426
|
+
margin-top: 1.0em;
|
427
|
+
margin-bottom: 1.5em;
|
428
|
+
}
|
429
|
+
div.tableblock > table {
|
430
|
+
border: 3px solid #527bbd;
|
431
|
+
}
|
432
|
+
thead, p.table.header {
|
433
|
+
font-weight: bold;
|
434
|
+
color: #527bbd;
|
435
|
+
}
|
436
|
+
p.table {
|
437
|
+
margin-top: 0;
|
438
|
+
}
|
439
|
+
/* Because the table frame attribute is overriden by CSS in most browsers. */
|
440
|
+
div.tableblock > table[frame="void"] {
|
441
|
+
border-style: none;
|
442
|
+
}
|
443
|
+
div.tableblock > table[frame="hsides"] {
|
444
|
+
border-left-style: none;
|
445
|
+
border-right-style: none;
|
446
|
+
}
|
447
|
+
div.tableblock > table[frame="vsides"] {
|
448
|
+
border-top-style: none;
|
449
|
+
border-bottom-style: none;
|
450
|
+
}
|
451
|
+
|
452
|
+
|
453
|
+
/*
|
454
|
+
* html5 specific
|
455
|
+
*
|
456
|
+
* */
|
457
|
+
|
458
|
+
table.tableblock {
|
459
|
+
margin-top: 1.0em;
|
460
|
+
margin-bottom: 1.5em;
|
461
|
+
}
|
462
|
+
thead, p.tableblock.header {
|
463
|
+
font-weight: bold;
|
464
|
+
color: #527bbd;
|
465
|
+
}
|
466
|
+
p.tableblock {
|
467
|
+
margin-top: 0;
|
468
|
+
}
|
469
|
+
table.tableblock {
|
470
|
+
border-width: 3px;
|
471
|
+
border-spacing: 0px;
|
472
|
+
border-style: solid;
|
473
|
+
border-color: #527bbd;
|
474
|
+
border-collapse: collapse;
|
475
|
+
}
|
476
|
+
th.tableblock, td.tableblock {
|
477
|
+
border-width: 1px;
|
478
|
+
padding: 4px;
|
479
|
+
border-style: solid;
|
480
|
+
border-color: #527bbd;
|
481
|
+
}
|
482
|
+
|
483
|
+
table.tableblock.frame-topbot {
|
484
|
+
border-left-style: hidden;
|
485
|
+
border-right-style: hidden;
|
486
|
+
}
|
487
|
+
table.tableblock.frame-sides {
|
488
|
+
border-top-style: hidden;
|
489
|
+
border-bottom-style: hidden;
|
490
|
+
}
|
491
|
+
table.tableblock.frame-none {
|
492
|
+
border-style: hidden;
|
493
|
+
}
|
494
|
+
|
495
|
+
th.tableblock.halign-left, td.tableblock.halign-left {
|
496
|
+
text-align: left;
|
497
|
+
}
|
498
|
+
th.tableblock.halign-center, td.tableblock.halign-center {
|
499
|
+
text-align: center;
|
500
|
+
}
|
501
|
+
th.tableblock.halign-right, td.tableblock.halign-right {
|
502
|
+
text-align: right;
|
503
|
+
}
|
504
|
+
|
505
|
+
th.tableblock.valign-top, td.tableblock.valign-top {
|
506
|
+
vertical-align: top;
|
507
|
+
}
|
508
|
+
th.tableblock.valign-middle, td.tableblock.valign-middle {
|
509
|
+
vertical-align: middle;
|
510
|
+
}
|
511
|
+
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
|
512
|
+
vertical-align: bottom;
|
513
|
+
}
|
514
|
+
|
515
|
+
|
516
|
+
/*
|
517
|
+
* manpage specific
|
518
|
+
*
|
519
|
+
* */
|
520
|
+
|
521
|
+
body.manpage h1 {
|
522
|
+
padding-top: 0.5em;
|
523
|
+
padding-bottom: 0.5em;
|
524
|
+
border-top: 2px solid silver;
|
525
|
+
border-bottom: 2px solid silver;
|
526
|
+
}
|
527
|
+
body.manpage h2 {
|
528
|
+
border-style: none;
|
529
|
+
}
|
530
|
+
body.manpage div.sectionbody {
|
531
|
+
margin-left: 3em;
|
532
|
+
}
|
533
|
+
|
534
|
+
@media print {
|
535
|
+
body.manpage div#toc { display: none; }
|
536
|
+
}
|
537
|
+
|
538
|
+
|
539
|
+
</style>
|
540
|
+
<script type="text/javascript">
|
541
|
+
/*<+'])');
|
584
|
+
// Function that scans the DOM tree for header elements (the DOM2
|
585
|
+
// nodeIterator API would be a better technique but not supported by all
|
586
|
+
// browsers).
|
587
|
+
var iterate = function (el) {
|
588
|
+
for (var i = el.firstChild; i != null; i = i.nextSibling) {
|
589
|
+
if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
|
590
|
+
var mo = re.exec(i.tagName);
|
591
|
+
if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
|
592
|
+
result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
|
593
|
+
}
|
594
|
+
iterate(i);
|
595
|
+
}
|
596
|
+
}
|
597
|
+
}
|
598
|
+
iterate(el);
|
599
|
+
return result;
|
600
|
+
}
|
601
|
+
|
602
|
+
var toc = document.getElementById("toc");
|
603
|
+
if (!toc) {
|
604
|
+
return;
|
605
|
+
}
|
606
|
+
|
607
|
+
// Delete existing TOC entries in case we're reloading the TOC.
|
608
|
+
var tocEntriesToRemove = [];
|
609
|
+
var i;
|
610
|
+
for (i = 0; i < toc.childNodes.length; i++) {
|
611
|
+
var entry = toc.childNodes[i];
|
612
|
+
if (entry.nodeName.toLowerCase() == 'div'
|
613
|
+
&& entry.getAttribute("class")
|
614
|
+
&& entry.getAttribute("class").match(/^toclevel/))
|
615
|
+
tocEntriesToRemove.push(entry);
|
616
|
+
}
|
617
|
+
for (i = 0; i < tocEntriesToRemove.length; i++) {
|
618
|
+
toc.removeChild(tocEntriesToRemove[i]);
|
619
|
+
}
|
620
|
+
|
621
|
+
// Rebuild TOC entries.
|
622
|
+
var entries = tocEntries(document.getElementById("content"), toclevels);
|
623
|
+
for (var i = 0; i < entries.length; ++i) {
|
624
|
+
var entry = entries[i];
|
625
|
+
if (entry.element.id == "")
|
626
|
+
entry.element.id = "_toc_" + i;
|
627
|
+
var a = document.createElement("a");
|
628
|
+
a.href = "#" + entry.element.id;
|
629
|
+
a.appendChild(document.createTextNode(entry.text));
|
630
|
+
var div = document.createElement("div");
|
631
|
+
div.appendChild(a);
|
632
|
+
div.className = "toclevel" + entry.toclevel;
|
633
|
+
toc.appendChild(div);
|
634
|
+
}
|
635
|
+
if (entries.length == 0)
|
636
|
+
toc.parentNode.removeChild(toc);
|
637
|
+
},
|
638
|
+
|
639
|
+
|
640
|
+
/////////////////////////////////////////////////////////////////////
|
641
|
+
// Footnotes generator
|
642
|
+
/////////////////////////////////////////////////////////////////////
|
643
|
+
|
644
|
+
/* Based on footnote generation code from:
|
645
|
+
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
|
646
|
+
*/
|
647
|
+
|
648
|
+
footnotes: function () {
|
649
|
+
// Delete existing footnote entries in case we're reloading the footnodes.
|
650
|
+
var i;
|
651
|
+
var noteholder = document.getElementById("footnotes");
|
652
|
+
if (!noteholder) {
|
653
|
+
return;
|
654
|
+
}
|
655
|
+
var entriesToRemove = [];
|
656
|
+
for (i = 0; i < noteholder.childNodes.length; i++) {
|
657
|
+
var entry = noteholder.childNodes[i];
|
658
|
+
if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
|
659
|
+
entriesToRemove.push(entry);
|
660
|
+
}
|
661
|
+
for (i = 0; i < entriesToRemove.length; i++) {
|
662
|
+
noteholder.removeChild(entriesToRemove[i]);
|
663
|
+
}
|
664
|
+
|
665
|
+
// Rebuild footnote entries.
|
666
|
+
var cont = document.getElementById("content");
|
667
|
+
var spans = cont.getElementsByTagName("span");
|
668
|
+
var refs = {};
|
669
|
+
var n = 0;
|
670
|
+
for (i=0; i<spans.length; i++) {
|
671
|
+
if (spans[i].className == "footnote") {
|
672
|
+
n++;
|
673
|
+
var note = spans[i].getAttribute("data-note");
|
674
|
+
if (!note) {
|
675
|
+
// Use [\s\S] in place of . so multi-line matches work.
|
676
|
+
// Because JavaScript has no s (dotall) regex flag.
|
677
|
+
note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
|
678
|
+
spans[i].innerHTML =
|
679
|
+
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
|
680
|
+
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
681
|
+
spans[i].setAttribute("data-note", note);
|
682
|
+
}
|
683
|
+
noteholder.innerHTML +=
|
684
|
+
"<div class='footnote' id='_footnote_" + n + "'>" +
|
685
|
+
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
|
686
|
+
n + "</a>. " + note + "</div>";
|
687
|
+
var id =spans[i].getAttribute("id");
|
688
|
+
if (id != null) refs["#"+id] = n;
|
689
|
+
}
|
690
|
+
}
|
691
|
+
if (n == 0)
|
692
|
+
noteholder.parentNode.removeChild(noteholder);
|
693
|
+
else {
|
694
|
+
// Process footnoterefs.
|
695
|
+
for (i=0; i<spans.length; i++) {
|
696
|
+
if (spans[i].className == "footnoteref") {
|
697
|
+
var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
|
698
|
+
href = href.match(/#.*/)[0]; // Because IE return full URL.
|
699
|
+
n = refs[href];
|
700
|
+
spans[i].innerHTML =
|
701
|
+
"[<a href='#_footnote_" + n +
|
702
|
+
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
703
|
+
}
|
704
|
+
}
|
705
|
+
}
|
706
|
+
},
|
707
|
+
|
708
|
+
install: function(toclevels) {
|
709
|
+
var timerId;
|
710
|
+
|
711
|
+
function reinstall() {
|
712
|
+
asciidoc.footnotes();
|
713
|
+
if (toclevels) {
|
714
|
+
asciidoc.toc(toclevels);
|
715
|
+
}
|
716
|
+
}
|
717
|
+
|
718
|
+
function reinstallAndRemoveTimer() {
|
719
|
+
clearInterval(timerId);
|
720
|
+
reinstall();
|
721
|
+
}
|
722
|
+
|
723
|
+
timerId = setInterval(reinstall, 500);
|
724
|
+
if (document.addEventListener)
|
725
|
+
document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
|
726
|
+
else
|
727
|
+
window.onload = reinstallAndRemoveTimer;
|
728
|
+
}
|
729
|
+
|
730
|
+
}
|
731
|
+
asciidoc.install();
|
732
|
+
/*]]>*/
|
733
|
+
</script>
|
734
|
+
</head>
|
735
|
+
<body class="manpage">
|
736
|
+
<div id="header">
|
737
|
+
<h1>
|
738
|
+
git-multi(1) Manual Page
|
739
|
+
</h1>
|
740
|
+
<h2>NAME</h2>
|
741
|
+
<div class="sectionbody">
|
742
|
+
<p>git-multi -
|
743
|
+
execute the same git command in multiple repositories
|
744
|
+
</p>
|
745
|
+
</div>
|
746
|
+
</div>
|
747
|
+
<div id="content">
|
748
|
+
<div class="sect1">
|
749
|
+
<h2 id="_version">VERSION</h2>
|
750
|
+
<div class="sectionbody">
|
751
|
+
<div class="paragraph"><p>This is <code>v1.0.3</code> of <em>git multi</em> … hooray!</p></div>
|
752
|
+
</div>
|
753
|
+
</div>
|
754
|
+
<div class="sect1">
|
755
|
+
<h2 id="_synopsis">SYNOPSIS</h2>
|
756
|
+
<div class="sectionbody">
|
757
|
+
<div class="paragraph"><p>There are some options for <code>git multi</code> itself, in which case it
|
758
|
+
is invoked as follows:</p></div>
|
759
|
+
<div class="verseblock">
|
760
|
+
<pre class="content"><em>git multi</em> <dash_dash_option> [<option_arguments>]</pre>
|
761
|
+
<div class="attribution">
|
762
|
+
</div></div>
|
763
|
+
<div class="paragraph"><p>To execute the same git command in multiple repositories, the
|
764
|
+
invocation is as follows:</p></div>
|
765
|
+
<div class="verseblock">
|
766
|
+
<pre class="content"><em>git multi</em> <git_command> [<git_command_arguments>]</pre>
|
767
|
+
<div class="attribution">
|
768
|
+
</div></div>
|
769
|
+
</div>
|
770
|
+
</div>
|
771
|
+
<div class="sect1">
|
772
|
+
<h2 id="_description">DESCRIPTION</h2>
|
773
|
+
<div class="sectionbody">
|
774
|
+
<div class="paragraph"><p>Convenient way to execute the same git command in a set of related repos,
|
775
|
+
currently the repositories of a GitHub user, incl. the organizations they
|
776
|
+
are a member of; the repo list is determined via a GitHub API v3 call, and
|
777
|
+
cached locally <em>(in binary format)</em> for performance and offline usage.</p></div>
|
778
|
+
</div>
|
779
|
+
</div>
|
780
|
+
<div class="sect1">
|
781
|
+
<h2 id="_options">OPTIONS</h2>
|
782
|
+
<div class="sectionbody">
|
783
|
+
<div class="dlist"><dl>
|
784
|
+
<dt class="hdlist1">
|
785
|
+
--help
|
786
|
+
</dt>
|
787
|
+
<dd>
|
788
|
+
<p>
|
789
|
+
you’re looking at it: show the man page
|
790
|
+
</p>
|
791
|
+
</dd>
|
792
|
+
<dt class="hdlist1">
|
793
|
+
--html
|
794
|
+
</dt>
|
795
|
+
<dd>
|
796
|
+
<p>
|
797
|
+
open the HTML version of the man page
|
798
|
+
</p>
|
799
|
+
</dd>
|
800
|
+
<dt class="hdlist1">
|
801
|
+
--check
|
802
|
+
</dt>
|
803
|
+
<dd>
|
804
|
+
<p>
|
805
|
+
checks all the required settings and configurations
|
806
|
+
</p>
|
807
|
+
</dd>
|
808
|
+
<dt class="hdlist1">
|
809
|
+
--version
|
810
|
+
</dt>
|
811
|
+
<dd>
|
812
|
+
<p>
|
813
|
+
print out this script’s version number
|
814
|
+
</p>
|
815
|
+
</dd>
|
816
|
+
<dt class="hdlist1">
|
817
|
+
--refresh
|
818
|
+
</dt>
|
819
|
+
<dd>
|
820
|
+
<p>
|
821
|
+
refresh the list of user & organization repos
|
822
|
+
</p>
|
823
|
+
</dd>
|
824
|
+
<dt class="hdlist1">
|
825
|
+
--json
|
826
|
+
</dt>
|
827
|
+
<dd>
|
828
|
+
<p>
|
829
|
+
output repository details to JSON
|
830
|
+
</p>
|
831
|
+
</dd>
|
832
|
+
<dt class="hdlist1">
|
833
|
+
--count
|
834
|
+
</dt>
|
835
|
+
<dd>
|
836
|
+
<p>
|
837
|
+
print out the count of repos (per type)
|
838
|
+
</p>
|
839
|
+
</dd>
|
840
|
+
<dt class="hdlist1">
|
841
|
+
--list
|
842
|
+
</dt>
|
843
|
+
<dd>
|
844
|
+
<p>
|
845
|
+
print out the names of all repos
|
846
|
+
</p>
|
847
|
+
</dd>
|
848
|
+
<dt class="hdlist1">
|
849
|
+
--archived
|
850
|
+
</dt>
|
851
|
+
<dd>
|
852
|
+
<p>
|
853
|
+
print out the names of all repos
|
854
|
+
</p>
|
855
|
+
</dd>
|
856
|
+
<dt class="hdlist1">
|
857
|
+
--forked
|
858
|
+
</dt>
|
859
|
+
<dd>
|
860
|
+
<p>
|
861
|
+
print out the names of all repos
|
862
|
+
</p>
|
863
|
+
</dd>
|
864
|
+
<dt class="hdlist1">
|
865
|
+
--private
|
866
|
+
</dt>
|
867
|
+
<dd>
|
868
|
+
<p>
|
869
|
+
print out the names of all repos
|
870
|
+
</p>
|
871
|
+
</dd>
|
872
|
+
<dt class="hdlist1">
|
873
|
+
--paths
|
874
|
+
</dt>
|
875
|
+
<dd>
|
876
|
+
<p>
|
877
|
+
print out the full path for each repos
|
878
|
+
</p>
|
879
|
+
</dd>
|
880
|
+
<dt class="hdlist1">
|
881
|
+
--spurious
|
882
|
+
</dt>
|
883
|
+
<dd>
|
884
|
+
<p>
|
885
|
+
list cloned repos whose remote doesn’t match a github.com origin
|
886
|
+
</p>
|
887
|
+
</dd>
|
888
|
+
<dt class="hdlist1">
|
889
|
+
--missing
|
890
|
+
</dt>
|
891
|
+
<dd>
|
892
|
+
<p>
|
893
|
+
print out names of repos that haven’t been cloned
|
894
|
+
</p>
|
895
|
+
</dd>
|
896
|
+
<dt class="hdlist1">
|
897
|
+
--stale
|
898
|
+
</dt>
|
899
|
+
<dd>
|
900
|
+
<p>
|
901
|
+
list repos that have been deleted on github.com
|
902
|
+
</p>
|
903
|
+
</dd>
|
904
|
+
<dt class="hdlist1">
|
905
|
+
--excess
|
906
|
+
</dt>
|
907
|
+
<dd>
|
908
|
+
<p>
|
909
|
+
list repos that don’t exist on github.com
|
910
|
+
</p>
|
911
|
+
</dd>
|
912
|
+
<dt class="hdlist1">
|
913
|
+
--clone
|
914
|
+
</dt>
|
915
|
+
<dd>
|
916
|
+
<p>
|
917
|
+
clones missing repositories into <code>${HOME}/Workarea</code> (by default)
|
918
|
+
</p>
|
919
|
+
</dd>
|
920
|
+
<dt class="hdlist1">
|
921
|
+
--query (args)
|
922
|
+
</dt>
|
923
|
+
<dd>
|
924
|
+
<p>
|
925
|
+
query GitHub repo metadata for each repository
|
926
|
+
</p>
|
927
|
+
</dd>
|
928
|
+
<dt class="hdlist1">
|
929
|
+
--find <ruby>
|
930
|
+
</dt>
|
931
|
+
<dd>
|
932
|
+
<p>
|
933
|
+
print out the repos for which the Ruby code evaluates to true
|
934
|
+
</p>
|
935
|
+
</dd>
|
936
|
+
<dt class="hdlist1">
|
937
|
+
--eval <ruby>
|
938
|
+
</dt>
|
939
|
+
<dd>
|
940
|
+
<p>
|
941
|
+
execute the given Ruby code in the context of each repo
|
942
|
+
</p>
|
943
|
+
</dd>
|
944
|
+
<dt class="hdlist1">
|
945
|
+
--raw <cmd>
|
946
|
+
</dt>
|
947
|
+
<dd>
|
948
|
+
<p>
|
949
|
+
execute the given shell command inside each git repository
|
950
|
+
</p>
|
951
|
+
</dd>
|
952
|
+
</dl></div>
|
953
|
+
</div>
|
954
|
+
</div>
|
955
|
+
<div class="sect1">
|
956
|
+
<h2 id="_examples">EXAMPLES</h2>
|
957
|
+
<div class="sectionbody">
|
958
|
+
<div class="paragraph"><p>count the number of repos</p></div>
|
959
|
+
<div class="literalblock">
|
960
|
+
<div class="content">
|
961
|
+
<pre><code>git multi --list | wc -l</code></pre>
|
962
|
+
</div></div>
|
963
|
+
<div class="paragraph"><p>disk usage of each locally cloned repo</p></div>
|
964
|
+
<div class="literalblock">
|
965
|
+
<div class="content">
|
966
|
+
<pre><code>git multi --paths | xargs -n 1 du -hs</code></pre>
|
967
|
+
</div></div>
|
968
|
+
<div class="paragraph"><p>disk usage using the <code>--raw</code> option</p></div>
|
969
|
+
<div class="literalblock">
|
970
|
+
<div class="content">
|
971
|
+
<pre><code>git multi --raw 'du -hs .'</code></pre>
|
972
|
+
</div></div>
|
973
|
+
<div class="paragraph"><p>group and count the repos by GitHub-determined language</p></div>
|
974
|
+
<div class="literalblock">
|
975
|
+
<div class="content">
|
976
|
+
<pre><code>git multi --query language | cut -f 2 -d : | sort | uniq -c | sort -n -r</code></pre>
|
977
|
+
</div></div>
|
978
|
+
<div class="paragraph"><p>find out the most-used Ruby versions</p></div>
|
979
|
+
<div class="literalblock">
|
980
|
+
<div class="content">
|
981
|
+
<pre><code>git multi --raw '[ -f .ruby-version ] && cat .ruby-version' | cut -f 2 -d : | sort | uniq -c | sort -n -r</code></pre>
|
982
|
+
</div></div>
|
983
|
+
<div class="paragraph"><p>find GitHub repos without a description</p></div>
|
984
|
+
<div class="literalblock">
|
985
|
+
<div class="content">
|
986
|
+
<pre><code>git multi --query description | egrep ': *$'</code></pre>
|
987
|
+
</div></div>
|
988
|
+
<div class="paragraph"><p>fetch remote branches for all repos</p></div>
|
989
|
+
<div class="literalblock">
|
990
|
+
<div class="content">
|
991
|
+
<pre><code>git multi fetch -p</code></pre>
|
992
|
+
</div></div>
|
993
|
+
<div class="paragraph"><p>print out the local branch for each repo</p></div>
|
994
|
+
<div class="literalblock">
|
995
|
+
<div class="content">
|
996
|
+
<pre><code>git multi rev-parse --abbrev-ref=strict HEAD</code></pre>
|
997
|
+
</div></div>
|
998
|
+
<div class="paragraph"><p>find all repos for which the <em>origin</em> remote isn’t github.com</p></div>
|
999
|
+
<div class="literalblock">
|
1000
|
+
<div class="content">
|
1001
|
+
<pre><code>git multi config --get remote.origin.url | fgrep -v git@github.com:</code></pre>
|
1002
|
+
</div></div>
|
1003
|
+
<div class="paragraph"><p>a kind of "repository creation" report: count the number of repos created in each quarter</p></div>
|
1004
|
+
<div class="literalblock">
|
1005
|
+
<div class="content">
|
1006
|
+
<pre><code>git multi --eval "class ::Time; def quarter() (month.to_f / 3.0).ceil; end; end; puts format('%d-Q%d', created_at.year, created_at.quarter)" | sort | uniq -c</code></pre>
|
1007
|
+
</div></div>
|
1008
|
+
<div class="paragraph"><p>for each repo, list all remote branches, sorted by the "age" of the last commit on each branch</p></div>
|
1009
|
+
<div class="literalblock">
|
1010
|
+
<div class="content">
|
1011
|
+
<pre><code>git multi for-each-ref --sort="-authordate" --format="%(refname)%09%(authordate:relative)%09%(authorname)" refs/remotes/origin</code></pre>
|
1012
|
+
</div></div>
|
1013
|
+
<div class="paragraph"><p>same as above, but columnize the generated output (NOTE: replace <em>^I</em> with CTRL-V/CTRL-I in your terminal)</p></div>
|
1014
|
+
<div class="literalblock">
|
1015
|
+
<div class="content">
|
1016
|
+
<pre><code>git multi for-each-ref --sort="-authordate" --format="%(refname)%09%(authordate:relative)%09%(authorname)" refs/remotes/origin | column -t -s "^I"</code></pre>
|
1017
|
+
</div></div>
|
1018
|
+
<div class="paragraph"><p>same as above, but refresh the list of remote branches first</p></div>
|
1019
|
+
<div class="literalblock">
|
1020
|
+
<div class="content">
|
1021
|
+
<pre><code>git multi fetch -p ; git multi for-each-ref --sort="-authordate" --format="%(refname)%09%(authordate:relative)%09%(authorname)" refs/remotes/origin</code></pre>
|
1022
|
+
</div></div>
|
1023
|
+
<div class="paragraph"><p>find all Rails projects</p></div>
|
1024
|
+
<div class="literalblock">
|
1025
|
+
<div class="content">
|
1026
|
+
<pre><code>git multi --raw '[ -f Gemfile ] && fgrep -q -l rails Gemfile && echo uses Rails' | cat</code></pre>
|
1027
|
+
</div></div>
|
1028
|
+
<div class="paragraph"><p>find all Mongoid dependencies</p></div>
|
1029
|
+
<div class="literalblock">
|
1030
|
+
<div class="content">
|
1031
|
+
<pre><code>git multi --raw '[ -f Gemfile.lock ] && egrep -i "^ mongoid (.*)" Gemfile.lock' | column -s: -t</code></pre>
|
1032
|
+
</div></div>
|
1033
|
+
<div class="paragraph"><p>find all projects that have been pushed to in the last week</p></div>
|
1034
|
+
<div class="literalblock">
|
1035
|
+
<div class="content">
|
1036
|
+
<pre><code>git multi --find '((Time.now - pushed_at) / 60 / 60 / 24) <= 7'</code></pre>
|
1037
|
+
</div></div>
|
1038
|
+
<div class="paragraph"><p>print out the number of days since the last push to each repository</p></div>
|
1039
|
+
<div class="literalblock">
|
1040
|
+
<div class="content">
|
1041
|
+
<pre><code>git multi --eval 'puts "%d days" % ((Time.now - pushed_at) / 60 / 60 / 24)'</code></pre>
|
1042
|
+
</div></div>
|
1043
|
+
<div class="paragraph"><p>find all projects that have seen activity this calendar year</p></div>
|
1044
|
+
<div class="literalblock">
|
1045
|
+
<div class="content">
|
1046
|
+
<pre><code>git multi --find 'pushed_at >= Date.civil(Date.today.year, 1, 1).to_time'</code></pre>
|
1047
|
+
</div></div>
|
1048
|
+
<div class="paragraph"><p>print out all webhooks</p></div>
|
1049
|
+
<div class="literalblock">
|
1050
|
+
<div class="content">
|
1051
|
+
<pre><code>git multi --eval '(hooks = client.hooks(project.full_name)).any? && begin print project.full_name ; print "\t" ; puts hooks.map { |hook| ["", hook.name, hook.config.url].join("\t") } ; end'</code></pre>
|
1052
|
+
</div></div>
|
1053
|
+
<div class="paragraph"><p>print out all deploy keys</p></div>
|
1054
|
+
<div class="literalblock">
|
1055
|
+
<div class="content">
|
1056
|
+
<pre><code>git multi --eval '(keys = client.list_deploy_keys(project.full_name)).any? && begin print project.full_name ; print "\t" ; puts keys.map(&:title).sort.join("\t") ; end'</code></pre>
|
1057
|
+
</div></div>
|
1058
|
+
<div class="paragraph"><p>find all organization repositories that depend on a given org repo, e.g. <em>business_rules</em></p></div>
|
1059
|
+
<div class="literalblock">
|
1060
|
+
<div class="content">
|
1061
|
+
<pre><code>git multi --graph | fgrep business_rules</code></pre>
|
1062
|
+
</div></div>
|
1063
|
+
<div class="paragraph"><p>generate a dependency graph of all organization repositories using yuml.me</p></div>
|
1064
|
+
<div class="literalblock">
|
1065
|
+
<div class="content">
|
1066
|
+
<pre><code>DEPENDENCIES=$( git multi --graph | ruby -n -e 'parent, children = $_.split(": ") ; puts children.split(" ").map { |child| "[#{parent}]->[#{child}]" }' | tr '\n' ',' ) ; open "http://yuml.me/diagram/scruffy/class/${DEPENDENCIES}"</code></pre>
|
1067
|
+
</div></div>
|
1068
|
+
<div class="paragraph"><p>generate a dependency graph of all organization repositories using Graphviz</p></div>
|
1069
|
+
<div class="literalblock">
|
1070
|
+
<div class="content">
|
1071
|
+
<pre><code>git multi --graph | ruby -n -e 'parent, children = $_.split(": ") ; puts children.split(" ").map { |child| "\"#{parent}\"->\"#{child}\";" }' | awk 'BEGIN { print "digraph {\nrankdir=\"LR\";\n" } ; { print ; } END { print "}\n" } ; ' | dot -Tpng > /tmp/ghor.png ; open -a Preview /tmp/ghor.png</code></pre>
|
1072
|
+
</div></div>
|
1073
|
+
</div>
|
1074
|
+
</div>
|
1075
|
+
<div class="sect1">
|
1076
|
+
<h2 id="_query_arguments">QUERY ARGUMENTS</h2>
|
1077
|
+
<div class="sectionbody">
|
1078
|
+
<div class="paragraph"><p>The following is a list of valid arguments for the <code>git multi --query</code> option:</p></div>
|
1079
|
+
<div class="literalblock">
|
1080
|
+
<div class="content">
|
1081
|
+
<pre><code>archive_url archived assignees_url
|
1082
|
+
blobs_url branches_url clone_url
|
1083
|
+
collaborators_url comments_url commits_url
|
1084
|
+
compare_url contents_url contributors_url
|
1085
|
+
created_at default_branch deployments_url
|
1086
|
+
description downloads_url events_url
|
1087
|
+
fork forks forks_count
|
1088
|
+
forks_url full_name git_commits_url
|
1089
|
+
git_refs_url git_tags_url git_url
|
1090
|
+
has_downloads has_issues has_pages
|
1091
|
+
has_projects has_wiki homepage
|
1092
|
+
hooks_url html_url id
|
1093
|
+
issue_comment_url issue_events_url issues_url
|
1094
|
+
keys_url labels_url language
|
1095
|
+
languages_url license merges_url
|
1096
|
+
milestones_url mirror_url name
|
1097
|
+
network_count node_id notifications_url
|
1098
|
+
open_issues open_issues_count organization
|
1099
|
+
owner permissions private
|
1100
|
+
pulls_url pushed_at releases_url
|
1101
|
+
size ssh_url stargazers_count
|
1102
|
+
stargazers_url statuses_url subscribers_count
|
1103
|
+
subscribers_url subscription_url svn_url
|
1104
|
+
tags_url teams_url trees_url
|
1105
|
+
updated_at url watchers
|
1106
|
+
watchers_count</code></pre>
|
1107
|
+
</div></div>
|
1108
|
+
</div>
|
1109
|
+
</div>
|
1110
|
+
<div class="sect1">
|
1111
|
+
<h2 id="_jq_integration">JQ INTEGRATION</h2>
|
1112
|
+
<div class="sectionbody">
|
1113
|
+
<div class="paragraph"><p><code>jq</code> is like <code>sed</code> for JSON data… all of the above query arguments can be
|
1114
|
+
used in conjunction with <code>jq</code> to query, filter, map and transform the GitHub
|
1115
|
+
repository attributes stored in the local, binary repository cache; here
|
1116
|
+
are some examples:</p></div>
|
1117
|
+
<div class="literalblock">
|
1118
|
+
<div class="content">
|
1119
|
+
<pre><code># print out each repository's name and its description
|
1120
|
+
git multi --json | jq '.[] | .name + ": " + .description'</code></pre>
|
1121
|
+
</div></div>
|
1122
|
+
<div class="literalblock">
|
1123
|
+
<div class="content">
|
1124
|
+
<pre><code># print out the name of all "forked" repositories
|
1125
|
+
git multi --json | jq '.[] | select(.fork == true) | .full_name'</code></pre>
|
1126
|
+
</div></div>
|
1127
|
+
</div>
|
1128
|
+
</div>
|
1129
|
+
<div class="sect1">
|
1130
|
+
<h2 id="_files">FILES</h2>
|
1131
|
+
<div class="sectionbody">
|
1132
|
+
<div class="dlist"><dl>
|
1133
|
+
<dt class="hdlist1">
|
1134
|
+
<code>${HOME}/Workarea</code>
|
1135
|
+
</dt>
|
1136
|
+
<dd>
|
1137
|
+
<p>
|
1138
|
+
root directory where repos will been cloned
|
1139
|
+
</p>
|
1140
|
+
</dd>
|
1141
|
+
<dt class="hdlist1">
|
1142
|
+
<code>${HOME}/.git/multi/repositories.byte</code>
|
1143
|
+
</dt>
|
1144
|
+
<dd>
|
1145
|
+
<p>
|
1146
|
+
local, binary cache of GitHub repository metadata
|
1147
|
+
</p>
|
1148
|
+
</dd>
|
1149
|
+
</dl></div>
|
1150
|
+
</div>
|
1151
|
+
</div>
|
1152
|
+
<div class="sect1">
|
1153
|
+
<h2 id="_references">REFERENCES</h2>
|
1154
|
+
<div class="sectionbody">
|
1155
|
+
<div class="ulist"><ul>
|
1156
|
+
<li>
|
1157
|
+
<p>
|
1158
|
+
homepage for <code>git-multi</code>:
|
1159
|
+
<a href="https://github.com/pvdb/git-multi">https://github.com/pvdb/git-multi</a>
|
1160
|
+
</p>
|
1161
|
+
</li>
|
1162
|
+
<li>
|
1163
|
+
<p>
|
1164
|
+
the GitHub API:
|
1165
|
+
<a href="https://developer.github.com/v3/">https://developer.github.com/v3/</a>
|
1166
|
+
</p>
|
1167
|
+
</li>
|
1168
|
+
<li>
|
1169
|
+
<p>
|
1170
|
+
the <code>jq</code> command-line utility:
|
1171
|
+
<a href="http://stedolan.github.io/jq/">http://stedolan.github.io/jq/</a>
|
1172
|
+
</p>
|
1173
|
+
</li>
|
1174
|
+
</ul></div>
|
1175
|
+
</div>
|
1176
|
+
</div>
|
1177
|
+
</div>
|
1178
|
+
<div id="footnotes"><hr /></div>
|
1179
|
+
<div id="footer">
|
1180
|
+
<div id="footer-text">
|
1181
|
+
Last updated
|
1182
|
+
2018-09-21 17:15:51 BST
|
1183
|
+
</div>
|
1184
|
+
</div>
|
1185
|
+
</body>
|
1186
|
+
</html>
|