descriptioncompact git log --oneline with who & when
homepage URLhttps://mackyle.github.io/git-log-compact/
repository URLhttps://github.com/mackyle/git-log-compact.git
ownermackyle@gmail.com
last changeTue, 24 Nov 2020 00:40:26 +0000 (23 17:40 -0700)
last refreshThu, 21 Nov 2024 08:20:31 +0000 (21 09:20 +0100)
content tags
add:
README.md

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:

When --graph mode is enabled, the graph output is enhanced as follows:

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:

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").

shortlog
2020-11-24 Kyle J. McKaygit-log-compact: pad multibyte initials properlymasterv1.0.1
2017-12-30 Kyle J. McKaytypos: fix more typographical errors
2016-12-20 Kyle J. McKaygit-log-compact: correct typos in usage help text
2016-10-12 Kyle J. McKaygit log --oneline alternative with dates, times and... v1.0
tags
3 years ago v1.0.1 git-log-compact version 1.0.1
8 years ago v1.0 git-log-compact version 1.0
heads
3 years ago master
6 years ago gh-pages