summaryrefslogtreecommitdiffstats
path: root/git-blame.html
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-12-18 16:43:11 -0800
committerJunio C Hamano <gitster@pobox.com>2012-12-18 16:43:11 -0800
commit9d9711544dc3090db6e5c52f9ce9c300bf4f5c14 (patch)
tree23257b9801739fd96c9e82ef98a17500dce9f88e /git-blame.html
parent9629d4f49e5ffcff5c5beb5c40bedcffcabcd905 (diff)
downloadgit-htmldocs-9d9711544dc3090db6e5c52f9ce9c300bf4f5c14.tar.gz
Autogenerated HTML docs for v1.8.1-rc2-5-g252f9
Diffstat (limited to 'git-blame.html')
-rw-r--r--git-blame.html500
1 files changed, 346 insertions, 154 deletions
diff --git a/git-blame.html b/git-blame.html
index 4943ca0cc..2a1b010dd 100644
--- a/git-blame.html
+++ b/git-blame.html
@@ -2,15 +2,25 @@
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<meta name="generator" content="AsciiDoc 8.5.2" />
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
+<meta name="generator" content="AsciiDoc 8.6.8" />
<title>git-blame(1)</title>
<style type="text/css">
-/* Debug borders */
-p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
-/*
- border: 1px solid red;
-*/
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
+
+/* Default font. */
+body {
+ font-family: Georgia,serif;
+}
+
+/* Title font. */
+h1, h2, h3, h4, h5, h6,
+div.title, caption.title,
+thead, p.table.header,
+#toctitle,
+#author, #revnumber, #revdate, #revremark,
+#footer {
+ font-family: Arial,Helvetica,sans-serif;
}
body {
@@ -35,13 +45,8 @@ strong {
color: #083194;
}
-tt {
- color: navy;
-}
-
h1, h2, h3, h4, h5, h6 {
color: #527bbd;
- font-family: sans-serif;
margin-top: 1.2em;
margin-bottom: 0.5em;
line-height: 1.3;
@@ -59,9 +64,11 @@ h3 {
h3 + * {
clear: left;
}
+h5 {
+ font-size: 1.0em;
+}
div.sectionbody {
- font-family: serif;
margin-left: 0;
}
@@ -77,45 +84,48 @@ p {
ul, ol, li > p {
margin-top: 0;
}
+ul > li { color: #aaa; }
+ul > li > * { color: black; }
-pre {
+.monospaced, code, pre {
+ font-family: "Courier New", Courier, monospace;
+ font-size: inherit;
+ color: navy;
padding: 0;
margin: 0;
}
-span#author {
+
+#author {
color: #527bbd;
- font-family: sans-serif;
font-weight: bold;
font-size: 1.1em;
}
-span#email {
+#email {
}
-span#revnumber, span#revdate, span#revremark {
- font-family: sans-serif;
+#revnumber, #revdate, #revremark {
}
-div#footer {
- font-family: sans-serif;
+#footer {
font-size: small;
border-top: 2px solid silver;
padding-top: 0.5em;
margin-top: 4.0em;
}
-div#footer-text {
+#footer-text {
float: left;
padding-bottom: 0.5em;
}
-div#footer-badges {
+#footer-badges {
float: right;
padding-bottom: 0.5em;
}
-div#preamble {
+#preamble {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
+div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
margin-top: 1.0em;
@@ -135,7 +145,6 @@ div.content { /* Block element content. */
/* Block element titles. */
div.title, caption.title {
color: #527bbd;
- font-family: sans-serif;
font-weight: bold;
text-align: left;
margin-top: 1.0em;
@@ -157,13 +166,15 @@ div.content + div.title {
div.sidebarblock > div.content {
background: #ffffee;
- border: 1px solid silver;
+ border: 1px solid #dddddd;
+ border-left: 4px solid #f0f0f0;
padding: 0.5em;
}
div.listingblock > div.content {
- border: 1px solid silver;
- background: #f4f4f4;
+ border: 1px solid #dddddd;
+ border-left: 5px solid #f0f0f0;
+ background: #f8f8f8;
padding: 0.5em;
}
@@ -171,8 +182,8 @@ div.quoteblock, div.verseblock {
padding-left: 1.0em;
margin-left: 1.0em;
margin-right: 10%;
- border-left: 5px solid #dddddd;
- color: #777777;
+ border-left: 5px solid #f0f0f0;
+ color: #888;
}
div.quoteblock > div.attribution {
@@ -180,8 +191,9 @@ div.quoteblock > div.attribution {
text-align: right;
}
-div.verseblock > div.content {
- white-space: pre;
+div.verseblock > pre.content {
+ font-family: inherit;
+ font-size: inherit;
}
div.verseblock > div.attribution {
padding-top: 0.75em;
@@ -254,35 +266,12 @@ div.compact div, div.compact div {
margin-bottom: 0.1em;
}
-div.tableblock > table {
- border: 3px solid #527bbd;
-}
-thead, p.table.header {
- font-family: sans-serif;
- font-weight: bold;
-}
tfoot {
font-weight: bold;
}
td > div.verse {
white-space: pre;
}
-p.table {
- margin-top: 0;
-}
-/* Because the table frame attribute is overriden by CSS in most browsers. */
-div.tableblock > table[frame="void"] {
- border-style: none;
-}
-div.tableblock > table[frame="hsides"] {
- border-left-style: none;
- border-right-style: none;
-}
-div.tableblock > table[frame="vsides"] {
- border-top-style: none;
- border-bottom-style: none;
-}
-
div.hdlist {
margin-top: 0.8em;
@@ -339,25 +328,32 @@ span.footnote, span.footnoteref {
min-width: 100px;
}
+div.colist td {
+ padding-right: 0.5em;
+ padding-bottom: 0.3em;
+ vertical-align: top;
+}
+div.colist td img {
+ margin-top: 0.3em;
+}
@media print {
- div#footer-badges { display: none; }
+ #footer-badges { display: none; }
}
-div#toc {
+#toc {
margin-bottom: 2.5em;
}
-div#toctitle {
+#toctitle {
color: #527bbd;
- font-family: sans-serif;
font-size: 1.1em;
font-weight: bold;
margin-top: 1.0em;
margin-bottom: 0.1em;
}
-div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
margin-top: 0;
margin-bottom: 0;
}
@@ -373,69 +369,173 @@ div.toclevel4 {
margin-left: 6em;
font-size: 0.9em;
}
-/* Overrides for manpage documents */
-h1 {
- padding-top: 0.5em;
- padding-bottom: 0.5em;
- border-top: 2px solid silver;
- border-bottom: 2px solid silver;
+
+span.aqua { color: aqua; }
+span.black { color: black; }
+span.blue { color: blue; }
+span.fuchsia { color: fuchsia; }
+span.gray { color: gray; }
+span.green { color: green; }
+span.lime { color: lime; }
+span.maroon { color: maroon; }
+span.navy { color: navy; }
+span.olive { color: olive; }
+span.purple { color: purple; }
+span.red { color: red; }
+span.silver { color: silver; }
+span.teal { color: teal; }
+span.white { color: white; }
+span.yellow { color: yellow; }
+
+span.aqua-background { background: aqua; }
+span.black-background { background: black; }
+span.blue-background { background: blue; }
+span.fuchsia-background { background: fuchsia; }
+span.gray-background { background: gray; }
+span.green-background { background: green; }
+span.lime-background { background: lime; }
+span.maroon-background { background: maroon; }
+span.navy-background { background: navy; }
+span.olive-background { background: olive; }
+span.purple-background { background: purple; }
+span.red-background { background: red; }
+span.silver-background { background: silver; }
+span.teal-background { background: teal; }
+span.white-background { background: white; }
+span.yellow-background { background: yellow; }
+
+span.big { font-size: 2em; }
+span.small { font-size: 0.6em; }
+
+span.underline { text-decoration: underline; }
+span.overline { text-decoration: overline; }
+span.line-through { text-decoration: line-through; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+
+/*
+ * xhtml11 specific
+ *
+ * */
+
+div.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
}
-h2 {
+div.tableblock > table {
+ border: 3px solid #527bbd;
+}
+thead, p.table.header {
+ font-weight: bold;
+ color: #527bbd;
+}
+p.table {
+ margin-top: 0;
+}
+/* Because the table frame attribute is overriden by CSS in most browsers. */
+div.tableblock > table[frame="void"] {
border-style: none;
}
-div.sectionbody {
- margin-left: 5%;
+div.tableblock > table[frame="hsides"] {
+ border-left-style: none;
+ border-right-style: none;
}
-
-@media print {
- div#toc { display: none; }
+div.tableblock > table[frame="vsides"] {
+ border-top-style: none;
+ border-bottom-style: none;
}
-/* Workarounds for IE6's broken and incomplete CSS2. */
-div.sidebar-content {
- background: #ffffee;
- border: 1px solid silver;
- padding: 0.5em;
+/*
+ * html5 specific
+ *
+ * */
+
+table.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
}
-div.sidebar-title, div.image-title {
- color: #527bbd;
- font-family: sans-serif;
+thead, p.tableblock.header {
font-weight: bold;
- margin-top: 0.0em;
- margin-bottom: 0.5em;
+ color: #527bbd;
+}
+p.tableblock {
+ margin-top: 0;
+}
+table.tableblock {
+ border-width: 3px;
+ border-spacing: 0px;
+ border-style: solid;
+ border-color: #527bbd;
+ border-collapse: collapse;
+}
+th.tableblock, td.tableblock {
+ border-width: 1px;
+ padding: 4px;
+ border-style: solid;
+ border-color: #527bbd;
}
-div.listingblock div.content {
- border: 1px solid silver;
- background: #f4f4f4;
- padding: 0.5em;
+table.tableblock.frame-topbot {
+ border-left-style: hidden;
+ border-right-style: hidden;
+}
+table.tableblock.frame-sides {
+ border-top-style: hidden;
+ border-bottom-style: hidden;
+}
+table.tableblock.frame-none {
+ border-style: hidden;
}
-div.quoteblock-attribution {
- padding-top: 0.5em;
+th.tableblock.halign-left, td.tableblock.halign-left {
+ text-align: left;
+}
+th.tableblock.halign-center, td.tableblock.halign-center {
+ text-align: center;
+}
+th.tableblock.halign-right, td.tableblock.halign-right {
text-align: right;
}
-div.verseblock-content {
- white-space: pre;
+th.tableblock.valign-top, td.tableblock.valign-top {
+ vertical-align: top;
}
-div.verseblock-attribution {
- padding-top: 0.75em;
- text-align: left;
+th.tableblock.valign-middle, td.tableblock.valign-middle {
+ vertical-align: middle;
+}
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
+ vertical-align: bottom;
}
-div.exampleblock-content {
- border-left: 3px solid #dddddd;
- padding-left: 0.5em;
+
+/*
+ * manpage specific
+ *
+ * */
+
+body.manpage h1 {
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+ border-top: 2px solid silver;
+ border-bottom: 2px solid silver;
+}
+body.manpage h2 {
+ border-style: none;
}
+body.manpage div.sectionbody {
+ margin-left: 3em;
+}
+
+@media print {
+ body.manpage div#toc { display: none; }
+}
+
-/* IE6 sets dynamically generated links as visited. */
-div#toc a:visited { color: blue; }
</style>
<script type="text/javascript">
/*<![CDATA[*/
-window.onload = function(){asciidoc.footnotes();}
var asciidoc = { // Namespace.
/////////////////////////////////////////////////////////////////////
@@ -477,7 +577,7 @@ toc: function (toclevels) {
function tocEntries(el, toclevels) {
var result = new Array;
- var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
+ var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
// Function that scans the DOM tree for header elements (the DOM2
// nodeIterator API would be a better technique but not supported by all
// browsers).
@@ -497,6 +597,25 @@ toc: function (toclevels) {
}
var toc = document.getElementById("toc");
+ if (!toc) {
+ return;
+ }
+
+ // Delete existing TOC entries in case we're reloading the TOC.
+ var tocEntriesToRemove = [];
+ var i;
+ for (i = 0; i < toc.childNodes.length; i++) {
+ var entry = toc.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div'
+ && entry.getAttribute("class")
+ && entry.getAttribute("class").match(/^toclevel/))
+ tocEntriesToRemove.push(entry);
+ }
+ for (i = 0; i < tocEntriesToRemove.length; i++) {
+ toc.removeChild(tocEntriesToRemove[i]);
+ }
+
+ // Rebuild TOC entries.
var entries = tocEntries(document.getElementById("content"), toclevels);
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
@@ -524,24 +643,44 @@ toc: function (toclevels) {
*/
footnotes: function () {
- var cont = document.getElementById("content");
+ // Delete existing footnote entries in case we're reloading the footnodes.
+ var i;
var noteholder = document.getElementById("footnotes");
+ if (!noteholder) {
+ return;
+ }
+ var entriesToRemove = [];
+ for (i = 0; i < noteholder.childNodes.length; i++) {
+ var entry = noteholder.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
+ entriesToRemove.push(entry);
+ }
+ for (i = 0; i < entriesToRemove.length; i++) {
+ noteholder.removeChild(entriesToRemove[i]);
+ }
+
+ // Rebuild footnote entries.
+ var cont = document.getElementById("content");
var spans = cont.getElementsByTagName("span");
var refs = {};
var n = 0;
for (i=0; i<spans.length; i++) {
if (spans[i].className == "footnote") {
n++;
- // Use [\s\S] in place of . so multi-line matches work.
- // Because JavaScript has no s (dotall) regex flag.
- note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+ var note = spans[i].getAttribute("data-note");
+ if (!note) {
+ // Use [\s\S] in place of . so multi-line matches work.
+ // Because JavaScript has no s (dotall) regex flag.
+ note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+ spans[i].innerHTML =
+ "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
+ "' title='View footnote' class='footnote'>" + n + "</a>]";
+ spans[i].setAttribute("data-note", note);
+ }
noteholder.innerHTML +=
"<div class='footnote' id='_footnote_" + n + "'>" +
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
n + "</a>. " + note + "</div>";
- spans[i].innerHTML =
- "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
- "' title='View footnote' class='footnote'>" + n + "</a>]";
var id =spans[i].getAttribute("id");
if (id != null) refs["#"+id] = n;
}
@@ -561,13 +700,36 @@ footnotes: function () {
}
}
}
+},
+
+install: function(toclevels) {
+ var timerId;
+
+ function reinstall() {
+ asciidoc.footnotes();
+ if (toclevels) {
+ asciidoc.toc(toclevels);
+ }
+ }
+
+ function reinstallAndRemoveTimer() {
+ clearInterval(timerId);
+ reinstall();
+ }
+
+ timerId = setInterval(reinstall, 500);
+ if (document.addEventListener)
+ document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
+ else
+ window.onload = reinstallAndRemoveTimer;
}
}
+asciidoc.install();
/*]]>*/
</script>
</head>
-<body>
+<body class="manpage">
<div id="header">
<h1>
git-blame(1) Manual Page
@@ -580,15 +742,18 @@ git-blame(1) Manual Page
</div>
</div>
<div id="content">
+<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
-<div class="verseblock-content"><em>git blame</em> [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental] [-L n,m]
+<pre class="content"><em>git blame</em> [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental] [-L n,m]
[-S &lt;revs-file&gt;] [-M] [-C] [-C] [-C] [--since=&lt;date&gt;] [--abbrev=&lt;n&gt;]
- [&lt;rev&gt; | --contents &lt;file&gt; | --reverse &lt;rev&gt;] [--] &lt;file&gt;</div>
-<div class="verseblock-attribution">
+ [&lt;rev&gt; | --contents &lt;file&gt; | --reverse &lt;rev&gt;] [--] &lt;file&gt;</pre>
+<div class="attribution">
</div></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Annotates each line in the given file with information from the revision which
@@ -598,7 +763,7 @@ last modified the line. Optionally, start annotating from the given revision.</p
renames (currently there is no option to turn the rename-following
off). To follow lines moved from one file to another, or to follow
lines that were copied and pasted from another file, etc., see the
-<tt>-C</tt> and <tt>-M</tt> options.</p></div>
+<code>-C</code> and <code>-M</code> options.</p></div>
<div class="paragraph"><p>The report does not tell you anything about lines which have been deleted or
replaced; you need to use a tool such as <em>git diff</em> or the "pickaxe"
interface briefly mentioned in the following paragraph.</p></div>
@@ -609,11 +774,13 @@ between files, and eventually deleted or replaced. It works by searching for
a text string in the diff. A small example:</p></div>
<div class="listingblock">
<div class="content">
-<pre><tt>$ git log --pretty=oneline -S'blame_usage'
+<pre><code>$ git log --pretty=oneline -S'blame_usage'
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S &lt;ancestry-file&gt;
-ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output</tt></pre>
+ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output</code></pre>
</div></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist"><dl>
@@ -623,7 +790,7 @@ ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output</tt></pre>
<dd>
<p>
Show blank SHA-1 for boundary commits. This can also
- be controlled via the <tt>blame.blankboundary</tt> config option.
+ be controlled via the <code>blame.blankboundary</code> config option.
</p>
</dd>
<dt class="hdlist1">
@@ -632,7 +799,7 @@ ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output</tt></pre>
<dd>
<p>
Do not treat root commits as boundaries. This can also be
- controlled via the <tt>blame.showroot</tt> config option.
+ controlled via the <code>blame.showroot</code> config option.
</p>
</dd>
<dt class="hdlist1">
@@ -748,7 +915,7 @@ of lines before or after the line given by &lt;start&gt;.</p></div>
<dd>
<p>
Specifies the encoding used to output author names
- and commit summaries. Setting it to <tt>none</tt> makes blame
+ and commit summaries. Setting it to <code>none</code> makes blame
output unconverted data. For more information see the
discussion about encoding in the <a href="git-log.html">git-log(1)</a>
manual page.
@@ -763,7 +930,7 @@ of lines before or after the line given by &lt;start&gt;.</p></div>
changes starting backwards from the working tree copy.
This flag makes the command pretend as if the working
tree copy has the contents of the named file (specify
- <tt>-</tt> to make the command read from the standard input).
+ <code>-</code> to make the command read from the standard input).
</p>
</dd>
<dt class="hdlist1">
@@ -804,7 +971,7 @@ commit. The default value is 20.</p></div>
</dt>
<dd>
<p>
- In addition to <tt>-M</tt>, detect lines moved or copied from other
+ In addition to <code>-M</code>, detect lines moved or copied from other
files that were modified in the same commit. This is
useful when you reorganize your program and move code
around across files. When this option is given twice,
@@ -817,7 +984,7 @@ commit. The default value is 20.</p></div>
alphanumeric characters that git must detect as moving/copying
between files for it to associate those lines with the parent
commit. And the default value is 40. If there are more than one
-<tt>-C</tt> options given, the &lt;num&gt; argument of the last <tt>-C</tt> will
+<code>-C</code> options given, the &lt;num&gt; argument of the last <code>-C</code> will
take effect.</p></div>
</dd>
<dt class="hdlist1">
@@ -842,8 +1009,8 @@ take effect.</p></div>
<dd>
<p>
Include debugging information related to the movement of
- lines between files (see <tt>-C</tt>) and lines moved within a
- file (see <tt>-M</tt>). The first number listed is the score.
+ lines between files (see <code>-C</code>) and lines moved within a
+ file (see <code>-M</code>). The first number listed is the score.
This is the number of alphanumeric characters detected
as having been moved between or within files. This must be above
a certain threshold for <em>git blame</em> to consider those lines
@@ -914,6 +1081,8 @@ take effect.</p></div>
</dd>
</dl></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_the_porcelain_format">THE PORCELAIN FORMAT</h2>
<div class="sectionbody">
<div class="paragraph"><p>In this format, each line is output after a header; the
@@ -970,43 +1139,45 @@ header elements later.</p></div>
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 <tt>--line-porcelain</tt> option can be used to output full
+the reader. The <code>--line-porcelain</code> option can be used to output full
commit information for each line, allowing simpler (but less efficient)
usage like:</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt># count the number of lines attributed to each author
+<pre><code># count the number of lines attributed to each author
git blame --line-porcelain file |
sed -n 's/^author //p' |
-sort | uniq -c | sort -rn</tt></pre>
+sort | uniq -c | sort -rn</code></pre>
</div></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_specifying_ranges">SPECIFYING RANGES</h2>
<div class="sectionbody">
<div class="paragraph"><p>Unlike <em>git blame</em> and <em>git annotate</em> in older versions of git, the extent
of the annotation can be limited to both line ranges and revision
ranges. When you are interested in finding the origin for
-lines 40-60 for file <tt>foo</tt>, you can use the <tt>-L</tt> option like so
+lines 40-60 for file <code>foo</code>, you can use the <code>-L</code> option like so
(they mean the same thing&#8201;&#8212;&#8201;both ask for 21 lines starting at
line 40):</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt>git blame -L 40,60 foo
-git blame -L 40,+21 foo</tt></pre>
+<pre><code>git blame -L 40,60 foo
+git blame -L 40,+21 foo</code></pre>
</div></div>
<div class="paragraph"><p>Also you can use a regular expression to specify the line range:</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt>git blame -L '/^sub hello {/,/^}$/' foo</tt></pre>
+<pre><code>git blame -L '/^sub hello {/,/^}$/' foo</code></pre>
</div></div>
-<div class="paragraph"><p>which limits the annotation to the body of the <tt>hello</tt> subroutine.</p></div>
+<div class="paragraph"><p>which limits the annotation to the body of the <code>hello</code> subroutine.</p></div>
<div class="paragraph"><p>When you are not interested in changes older than version
v2.6.18, or changes older than 3 weeks, you can use revision
range specifiers similar to <em>git rev-list</em>:</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt>git blame v2.6.18.. -- foo
-git blame --since=3.weeks -- foo</tt></pre>
+<pre><code>git blame v2.6.18.. -- foo
+git blame --since=3.weeks -- foo</code></pre>
</div></div>
<div class="paragraph"><p>When revision range specifiers are used to limit the annotation,
lines that have not changed since the range boundary (either the
@@ -1020,18 +1191,20 @@ refactor the code properly. You can first find the commit that
introduced the file with:</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt>git log --diff-filter=A --pretty=short -- foo</tt></pre>
+<pre><code>git log --diff-filter=A --pretty=short -- foo</code></pre>
</div></div>
<div class="paragraph"><p>and then annotate the change between the commit and its
-parents, using <tt>commit^!</tt> notation:</p></div>
+parents, using <code>commit^!</code> notation:</p></div>
<div class="literalblock">
<div class="content">
-<pre><tt>git blame -C -C -f $commit^! -- foo</tt></pre>
+<pre><code>git blame -C -C -f $commit^! -- foo</code></pre>
</div></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_incremental_output">INCREMENTAL OUTPUT</h2>
<div class="sectionbody">
-<div class="paragraph"><p>When called with <tt>--incremental</tt> option, the command outputs the
+<div class="paragraph"><p>When called with <code>--incremental</code> 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
@@ -1046,7 +1219,7 @@ Each blame entry always starts with a line of:
</p>
<div class="literalblock">
<div class="content">
-<pre><tt>&lt;40-byte hex sha1&gt; &lt;sourceline&gt; &lt;resultline&gt; &lt;num_lines&gt;</tt></pre>
+<pre><code>&lt;40-byte hex sha1&gt; &lt;sourceline&gt; &lt;resultline&gt; &lt;num_lines&gt;</code></pre>
</div></div>
<div class="paragraph"><p>Line numbers count from 1.</p></div>
</li>
@@ -1065,7 +1238,7 @@ Unlike the Porcelain format, the filename information is always
</p>
<div class="literalblock">
<div class="content">
-<pre><tt>"filename" &lt;whitespace-quoted-filename-goes-here&gt;</tt></pre>
+<pre><code>"filename" &lt;whitespace-quoted-filename-goes-here&gt;</code></pre>
</div></div>
<div class="paragraph"><p>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).</p></div>
@@ -1085,34 +1258,48 @@ commit commentary), a blame viewer will not care.</td>
</li>
</ol></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_mapping_authors">MAPPING AUTHORS</h2>
<div class="sectionbody">
-<div class="paragraph"><p>If the file <tt>.mailmap</tt> exists at the toplevel of the repository, or at
+<div class="paragraph"><p>If the file <code>.mailmap</code> exists at the toplevel of the repository, or at
the location pointed to by the mailmap.file configuration option, it
is used to map author and committer names and email addresses to
canonical real names and email addresses.</p></div>
<div class="paragraph"><p>In the simple form, each line in the file consists of the canonical
real name of an author, whitespace, and an email address used in the
commit (enclosed by <em>&lt;</em> and <em>&gt;</em>) to map to the name. For example:</p></div>
+<div class="openblock">
+<div class="content">
<div class="literalblock">
<div class="content">
-<pre><tt>Proper Name &lt;commit@email.xx&gt;</tt></pre>
+<pre><code>Proper Name &lt;commit@email.xx&gt;</code></pre>
+</div></div>
</div></div>
<div class="paragraph"><p>The more complex forms are:</p></div>
+<div class="openblock">
+<div class="content">
<div class="literalblock">
<div class="content">
-<pre><tt>&lt;proper@email.xx&gt; &lt;commit@email.xx&gt;</tt></pre>
+<pre><code>&lt;proper@email.xx&gt; &lt;commit@email.xx&gt;</code></pre>
+</div></div>
</div></div>
<div class="paragraph"><p>which allows mailmap to replace only the email part of a commit, and:</p></div>
+<div class="openblock">
+<div class="content">
<div class="literalblock">
<div class="content">
-<pre><tt>Proper Name &lt;proper@email.xx&gt; &lt;commit@email.xx&gt;</tt></pre>
+<pre><code>Proper Name &lt;proper@email.xx&gt; &lt;commit@email.xx&gt;</code></pre>
+</div></div>
</div></div>
<div class="paragraph"><p>which allows mailmap to replace both the name and the email of a
commit matching the specified commit email address, and:</p></div>
+<div class="openblock">
+<div class="content">
<div class="literalblock">
<div class="content">
-<pre><tt>Proper Name &lt;proper@email.xx&gt; Commit Name &lt;commit@email.xx&gt;</tt></pre>
+<pre><code>Proper Name &lt;proper@email.xx&gt; Commit Name &lt;commit@email.xx&gt;</code></pre>
+</div></div>
</div></div>
<div class="paragraph"><p>which allows mailmap to replace both the name and the email of a
commit matching both the specified commit name and email address.</p></div>
@@ -1120,19 +1307,19 @@ commit matching both the specified commit name and email address.</p></div>
and Joe, whose names appear in the repository under several forms:</p></div>
<div class="listingblock">
<div class="content">
-<pre><tt>Joe Developer &lt;joe@example.com&gt;
+<pre><code>Joe Developer &lt;joe@example.com&gt;
Joe R. Developer &lt;joe@example.com&gt;
Jane Doe &lt;jane@example.com&gt;
Jane Doe &lt;jane@laptop.(none)&gt;
-Jane D. &lt;jane@desktop.(none)&gt;</tt></pre>
+Jane D. &lt;jane@desktop.(none)&gt;</code></pre>
</div></div>
<div class="paragraph"><p>Now suppose that Joe wants his middle name initial used, and Jane
-prefers her family name fully spelled out. A proper <tt>.mailmap</tt> file
+prefers her family name fully spelled out. A proper <code>.mailmap</code> file
would look like:</p></div>
<div class="listingblock">
<div class="content">
-<pre><tt>Jane Doe &lt;jane@desktop.(none)&gt;
-Joe R. Developer &lt;joe@example.com&gt;</tt></pre>
+<pre><code>Jane Doe &lt;jane@desktop.(none)&gt;
+Joe R. Developer &lt;joe@example.com&gt;</code></pre>
</div></div>
<div class="paragraph"><p>Note how there is no need for an entry for &lt;<a href="mailto:jane@laptop">jane@laptop</a>.(none)&gt;, because the
real name of that author is already correct.</p></div>
@@ -1140,34 +1327,39 @@ real name of that author is already correct.</p></div>
authors:</p></div>
<div class="listingblock">
<div class="content">
-<pre><tt>nick1 &lt;bugs@company.xx&gt;
+<pre><code>nick1 &lt;bugs@company.xx&gt;
nick2 &lt;bugs@company.xx&gt;
nick2 &lt;nick2@company.xx&gt;
santa &lt;me@company.xx&gt;
claus &lt;me@company.xx&gt;
-CTO &lt;cto@coompany.xx&gt;</tt></pre>
+CTO &lt;cto@coompany.xx&gt;</code></pre>
</div></div>
-<div class="paragraph"><p>Then you might want a <tt>.mailmap</tt> file that looks like:</p></div>
+<div class="paragraph"><p>Then you might want a <code>.mailmap</code> file that looks like:</p></div>
<div class="listingblock">
<div class="content">
-<pre><tt>&lt;cto@company.xx&gt; &lt;cto@coompany.xx&gt;
+<pre><code>&lt;cto@company.xx&gt; &lt;cto@coompany.xx&gt;
Some Dude &lt;some@dude.xx&gt; nick1 &lt;bugs@company.xx&gt;
Other Author &lt;other@author.xx&gt; nick2 &lt;bugs@company.xx&gt;
Other Author &lt;other@author.xx&gt; &lt;nick2@company.xx&gt;
-Santa Claus &lt;santa.claus@northpole.xx&gt; &lt;me@company.xx&gt;</tt></pre>
+Santa Claus &lt;santa.claus@northpole.xx&gt; &lt;me@company.xx&gt;</code></pre>
</div></div>
<div class="paragraph"><p>Use hash <em>#</em> for comments that are either on their own line, or after
the email address.</p></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-annotate.html">git-annotate(1)</a></p></div>
</div>
+</div>
+<div class="sect1">
<h2 id="_git">GIT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
</div>
</div>
+</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">