In this format, each line is output after a header; the header at
the minimum has the first line which has:
• 40-byte SHA-1 of the commit the line is attributed to;
• the line number of the line in the original file;
• the line number of the line in the final file;
• on a line that starts a group of lines from a different
commit than the previous one, the number of lines in this
group. On subsequent lines this field is absent.
This header line is followed by the following information at
least once for each commit:
• the author name ("author"), email ("author-mail"), time
("author-time"), and time zone ("author-tz"); similarly for
committer.
• the filename in the commit that the line is attributed to.
• the first line of the commit log message ("summary").
The contents of the actual line is output after the above header,
prefixed by a TAB. This is to allow adding more header elements
later.
The porcelain format generally suppresses commit information that
has already been seen. For example, two lines that are blamed to
the same commit will both be shown, but the details for that
commit will be shown only once. This is more efficient, but may
require more state be kept by the reader. The --line-porcelain
option can be used to output full commit information for each
line, allowing simpler (but less efficient) usage like:
# count the number of lines attributed to each author
git blame --line-porcelain file |
sed -n 's/^author //p' |
sort | uniq -c | sort -rn