When called with --incremental
option, the command outputs the
result as it is built. The output generally will talk about lines
touched by more recent commits first (i.e. the lines will be
annotated out of order) and is meant to be used by interactive
viewers.
The output format is similar to the Porcelain format, but it does
not contain the actual lines from the file that is being
annotated.
1. Each blame entry always starts with a line of:
<40-byte hex sha1> <sourceline> <resultline> <num_lines>
Line numbers count from 1.
2. The first time that a commit shows up in the stream, it has
various other information about it printed out with a
one-word tag at the beginning of each line describing the
extra commit information (author, email, committer, dates,
summary, etc.).
3. Unlike the Porcelain format, the filename information is
always given and terminates the entry:
"filename" <whitespace-quoted-filename-goes-here>
and thus it is really quite easy to parse for some line- and
word-oriented parser (which should be quite natural for most
scripting languages).
Note
For people who do parsing: to make it more robust, just
ignore any lines between the first and last one ("<sha1>"
and "filename" lines) where you do not recognize the tag
words (or care about that particular one) at the
beginning of the "extended information" lines. That way,
if there is ever added information (like the commit
encoding or extended commit commentary), a blame viewer
will not care.