-
Notifications
You must be signed in to change notification settings - Fork 6
/
README
268 lines (209 loc) · 10.1 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
git-log-compact
===============
A compact alternative to `git log --oneline` that includes dates, times
and author and/or committer initials in a space efficient output format.
The `git-log-compact` script is intended to fill the gap between the
`--oneline` log output format and the `--pretty=short`/`--pretty=medium`
output formats. It is not strictly a one line per commit output format
(but almost) and while it only shows the title of each commit (like the
`--pretty=short` format) it does include author and date information
(like the `--pretty=medium` format) except that timestamps are shown
very compactly and author/committer names are shown as initials.
This allows one to get a complete view of repository activity in a very
compact output format that can show many commits per screen full and is
fully compatible with the `--graph` option.
The `--notes`, `--pretty` and `--format` options are not allowed but any
other `git log` options should work fine (especially `--graph`).
In both `--graph` and non `--graph` modes:
* Root commits are identified by `_` on either side of the hash
When `--graph` mode is enabled, the graph output is enhanced as follows:
* Breaks are inserted when necessary to avoid parent/child ambiguity
Installation
------------
Put the `git-log-compact` executable file in one of the directories
included in the `PATH` environment variable.
Optionally set a global alias to save typing such as `lc` like so:
git config --global alias.lc log-compact
Optionally set global default options such as `--two-initials` and
`--abbrev=8` like so:
git config --global log-compact.defaults "--two-initials --abbrev=8"
Dates & Times
-------------
Dates and times are shown in the local timezone. Set the TZ variable
before running `git log-compact` (e.g. `TZ=UTC git log-compact` to show
dates and times in UTC) or use the `--time-zone=` option (e.g.
`git log-compact --time-zone=UTC`) to change that.
Dates are shown on a date line all by themselves like so:
=== 2015-11-13 ===
The date line indicates that the times on all the following lines
(regardless of whether or not `--reverse` is being used) up until
the next date line take place on the indicated date. For example
this output:
=== 2015-09-28 ===
be08dee9 13:18 jc (tag: v2.6.0) Git 2.6
=== 2015-09-21 ===
8d530c4d 13:26 jc (tag: v2.6.0-rc3) Git 2.6-rc3
904f6e7c 10:51 bn send-email: fix uninitialized var warning for $
=== 2015-09-20 ===
18a21c19 09:49 ps l10n: de.po: better language for one string
2e0f3663 09:49 rt l10n: de.po: translate 2 messages
5fc31c1f 09:44 tq l10n: Update and review Vietnamese translation
shows one commit on 2015-09-28, two commits on 2015-09-21 and three
commits on 2015-09-20.
Note that a date line may appear more than once for the same date
(this is especially common when using `--graph` with its default
`--topo-order`).
The purpose of a date line is to indicate what date has been elided
from the following lines, nothing more.
Examples
--------
For example, running `git log-compact --decorate --graph -n 17 v2.6.1`
on the Git repository produces this output (which will be colorized
on the terminal if color is enabled):
=== 2015-09-28 ===
* 22f698cb 19:19 jch (tag: v2.6.1) Git 2.6.1
* 3adc4ec7 19:16 jch Sync with v2.5.4
|\
| * 24358560 15:34 jch (tag: v2.5.4) Git 2.5.4
| * 11a458be 15:33 jch Sync with 2.4.10
| |\
| | * a2558fb8 15:30 jch (tag: v2.4.10) Git 2.4.10
| | * 6343e2f6 15:28 jch Sync with 2.3.10
| | |\
| | | * 18b58f70 15:26 jch (tag: v2.3.10) Git 2.3.10
| | | * 92cdfd21 14:59 jch Merge branch 'jk/xdiff-memory-limits
| | | |\
| | | | * 83c4d380 14:58 jk merge-file: enforce MAX_XDIFF_SIZE o
| | | | * dcd1742e 14:57 jk xdiff: reject files larger than ~1GB
| | | | * 3efb9880 14:57 jk react to errors in xdi_diff
| | | * | f2df3104 14:46 jch Merge branch 'jk/transfer-limit-re
| | | |\ \
| | | | | | === 2015-09-25 ===
| | | | * | b2581164 15:32 bb http: limit redirection depth
| | | | * | f4113cac 15:30 bb http: limit redirection to protoco
| | | | * | 5088d3b3 15:28 jk transport: refactor protocol white
| | | | | | === 2015-09-28 ===
| | | * | | df37727a 14:33 jch Merge branch 'jk/transfer-limit-
| | | |\ \ \
| | | | |/ /
| | | | | /
| | | | |/
| | | |/|
| | | | | === 2015-09-23 ===
| | | | * 33cfccbb 11:35 jk submodule: allow only certain protoc
The output will be colorized according to the same settings used to enable/
disable color for git log output.
Additionally, the color of the three new items (dates, times and
initials) can be controlled with the `color.log-compact.date`,
`color.log-compact.time` and `color.log-compact.initials` config options.
Running `git log-compact --graph --max-parents=0` on the Git repository gives:
=== 2009-04-24 ===
*_0ca71b37_11:13 ap basic options parsing and whatnot.
=== 2007-01-30 ===
*_16d6b8ab_15:16 sh Initial import of a python script to import ch
=== 2006-11-06 ===
*_cb07fc2a_11:20 sop git-gui: Initial revision.
=== 2005-08-07 ===
*_161332a5_10:49 ks first working version
=== 2005-04-11 ===
*_2744b234_23:46 lt Start of early patch applicator tools for git.
=== 2005-05-08 ===
*_1db95b00_21:08 pm Add initial version of gitk to the CVS reposit
=== 2005-04-07 ===
*_e83c5163_15:13 lt Initial revision of "git", the information man
Notice the `_` on either side of the hash identifying those commits
as root commits. The `_` will only appear on the left side of the
hash if the selected output format would have normally included a
space there. In `--graph` mode, all the spaces between the commit mark
(e.g. `*`) and the hash are turned into `_`.
Running `git log-compact --decorate --graph --no-merges -n 13 v2.6.1`
on the Git repository results in this output:
=== 2015-09-28 ===
* 22f698cb 19:19 jch (tag: v2.6.1) Git 2.6.1
..........
* 24358560 15:34 jch (tag: v2.5.4) Git 2.5.4
..........
* a2558fb8 15:30 jch (tag: v2.4.10) Git 2.4.10
..........
* 18b58f70 15:26 jch (tag: v2.3.10) Git 2.3.10
..........
* 83c4d380 14:58 jk merge-file: enforce MAX_XDIFF_SIZE on incomi
* dcd1742e 14:57 jk xdiff: reject files larger than ~1GB
* 3efb9880 14:57 jk react to errors in xdi_diff
| === 2015-09-25 ===
| * b2581164 15:32 bb http: limit redirection depth
| * f4113cac 15:30 bb http: limit redirection to protocol-whitel
| * 5088d3b3 15:28 jk transport: refactor protocol whitelist cod
| | === 2015-09-23 ===
| * 33cfccbb 11:35 jk submodule: allow only certain protocols fo
| * a5adaced 11:35 jk transport: add a protocol-whitelist enviro
|/
| === 2015-09-28 ===
| * be08dee9 13:18 jch (tag: v2.6.0) Git 2.6
Notice how four linear breaks (`..........`) were automatically
inserted to avoid parent child relationship confusion.
In non `--graph` mode, linear breaks are NOT automatically inserted.
They must be requested with the usual `--show-linear-break` option.
Options
-------
In addition to allowing all the normal `git log` options except for
`--notes`, `--format` and `--pretty` (`--oneline` is allowed and
silently ignored), the following additional options may be utilized:
* `--seconds`
include seconds in the time (i.e. HH:MM:SS instead of just HH:MM)
* `--minutes`
include minutes but not seconds in the time (i.e. HH:MM not HH:MM:SS)
This is the default
* `--no-times`
omit the time field entirely
* `--two-initials`
only show at most two initials instead of the usual three
This is the default if `--initials=author,committer` or
`--initials=committer,author` is used.
* `--three-initials`
show at most three initials
This is the default unless `--initials=author,committer` or
`--initials=committer,author` is used.
* `--no-initials`
omit the initials field entirely
* `--commit-message`
when using `--walk-reflogs` show commit message not reflog message
* `--author-date`
force use of author dates and times
The default is to use committer dates and times unless
`--author-date-order` is in effect. This option forces author
dates and times to always be used and overrides `--committer-date`.
* `--committer-date`
force use of committer dates and times
The default is to use committer dates and times if `--date-order` or
`--topo-order` is in effect or `--author-date-order` is NOT in effect.
This option forces committer dates and times to always be used and
overrides a previous `--author-date` option.
* `--initials=author`
show author initials
This is the default behavior
* `--initials=committer`
show committer initials instead of author initials
* `--initials=author,committer`
show author and commiter initials separated by a `/`
This changes the initials width default from three to two.
* `--initials=committer,author`
show commiter and author initials separated by a `/`
This changes the initials width default from three to two.
* `--time-zone=zone`
set the TZ environment variable to `zone`
This is an alterative to setting TZ before running `git log-compact`
and will affect the time zone dates and times are displayed in.
* `--weekday`
show the weekday with the date
* `--no-weekday`
do not show the weekday with the date
This is the default behavior
In addition to the above options, color output is controlled as normal
for `git log` with the addition of `color.log-compact.date`,
`color.log-compact.time` and `color.log-compact.initials` config options
to alter the default colors for dates, times and initials respectively.
Furthermore, default options may be set in the `log-compact.defaults`
config value and they will be treated as though they appeared at
the very beginning of the `git log-compact` command line option list
(e.g. `git config log-compact.defaults "--abbrev=8 --seconds"`).