blob: 62f7cc82a1a270369a06363c3cd9509ddccc8471 [file] [log] [blame]
mgiuca@chromium.org81937562016-02-03 08:00:53 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4<head>
5<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
6<meta name="generator" content="AsciiDoc 8.6.9" />
7<title>git-hyper-blame(1)</title>
8<style type="text/css">
9/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
10
11/* Default font. */
12body {
13 font-family: Georgia,serif;
14}
15
16/* Title font. */
17h1, h2, h3, h4, h5, h6,
18div.title, caption.title,
19thead, p.table.header,
20#toctitle,
21#author, #revnumber, #revdate, #revremark,
22#footer {
23 font-family: Arial,Helvetica,sans-serif;
24}
25
26body {
27 margin: 1em 5% 1em 5%;
28}
29
30a {
31 color: blue;
32 text-decoration: underline;
33}
34a:visited {
35 color: fuchsia;
36}
37
38em {
39 font-style: italic;
40 color: navy;
41}
42
43strong {
44 font-weight: bold;
45 color: #083194;
46}
47
48h1, h2, h3, h4, h5, h6 {
49 color: #527bbd;
50 margin-top: 1.2em;
51 margin-bottom: 0.5em;
52 line-height: 1.3;
53}
54
55h1, h2, h3 {
56 border-bottom: 2px solid silver;
57}
58h2 {
59 padding-top: 0.5em;
60}
61h3 {
62 float: left;
63}
64h3 + * {
65 clear: left;
66}
67h5 {
68 font-size: 1.0em;
69}
70
71div.sectionbody {
72 margin-left: 0;
73}
74
75hr {
76 border: 1px solid silver;
77}
78
79p {
80 margin-top: 0.5em;
81 margin-bottom: 0.5em;
82}
83
84ul, ol, li > p {
85 margin-top: 0;
86}
87ul > li { color: #aaa; }
88ul > li > * { color: black; }
89
90.monospaced, code, pre {
91 font-family: "Courier New", Courier, monospace;
92 font-size: inherit;
93 color: navy;
94 padding: 0;
95 margin: 0;
96}
97pre {
98 white-space: pre-wrap;
99}
100
101#author {
102 color: #527bbd;
103 font-weight: bold;
104 font-size: 1.1em;
105}
106#email {
107}
108#revnumber, #revdate, #revremark {
109}
110
111#footer {
112 font-size: small;
113 border-top: 2px solid silver;
114 padding-top: 0.5em;
115 margin-top: 4.0em;
116}
117#footer-text {
118 float: left;
119 padding-bottom: 0.5em;
120}
121#footer-badges {
122 float: right;
123 padding-bottom: 0.5em;
124}
125
126#preamble {
127 margin-top: 1.5em;
128 margin-bottom: 1.5em;
129}
130div.imageblock, div.exampleblock, div.verseblock,
131div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
132div.admonitionblock {
133 margin-top: 1.0em;
134 margin-bottom: 1.5em;
135}
136div.admonitionblock {
137 margin-top: 2.0em;
138 margin-bottom: 2.0em;
139 margin-right: 10%;
140 color: #606060;
141}
142
143div.content { /* Block element content. */
144 padding: 0;
145}
146
147/* Block element titles. */
148div.title, caption.title {
149 color: #527bbd;
150 font-weight: bold;
151 text-align: left;
152 margin-top: 1.0em;
153 margin-bottom: 0.5em;
154}
155div.title + * {
156 margin-top: 0;
157}
158
159td div.title:first-child {
160 margin-top: 0.0em;
161}
162div.content div.title:first-child {
163 margin-top: 0.0em;
164}
165div.content + div.title {
166 margin-top: 0.0em;
167}
168
169div.sidebarblock > div.content {
170 background: #ffffee;
171 border: 1px solid #dddddd;
172 border-left: 4px solid #f0f0f0;
173 padding: 0.5em;
174}
175
176div.listingblock > div.content {
177 border: 1px solid #dddddd;
178 border-left: 5px solid #f0f0f0;
179 background: #f8f8f8;
180 padding: 0.5em;
181}
182
183div.quoteblock, div.verseblock {
184 padding-left: 1.0em;
185 margin-left: 1.0em;
186 margin-right: 10%;
187 border-left: 5px solid #f0f0f0;
188 color: #888;
189}
190
191div.quoteblock > div.attribution {
192 padding-top: 0.5em;
193 text-align: right;
194}
195
196div.verseblock > pre.content {
197 font-family: inherit;
198 font-size: inherit;
199}
200div.verseblock > div.attribution {
201 padding-top: 0.75em;
202 text-align: left;
203}
204/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
205div.verseblock + div.attribution {
206 text-align: left;
207}
208
209div.admonitionblock .icon {
210 vertical-align: top;
211 font-size: 1.1em;
212 font-weight: bold;
213 text-decoration: underline;
214 color: #527bbd;
215 padding-right: 0.5em;
216}
217div.admonitionblock td.content {
218 padding-left: 0.5em;
219 border-left: 3px solid #dddddd;
220}
221
222div.exampleblock > div.content {
223 border-left: 3px solid #dddddd;
224 padding-left: 0.5em;
225}
226
227div.imageblock div.content { padding-left: 0; }
228span.image img { border-style: none; vertical-align: text-bottom; }
229a.image:visited { color: white; }
230
231dl {
232 margin-top: 0.8em;
233 margin-bottom: 0.8em;
234}
235dt {
236 margin-top: 0.5em;
237 margin-bottom: 0;
238 font-style: normal;
239 color: navy;
240}
241dd > *:first-child {
242 margin-top: 0.1em;
243}
244
245ul, ol {
246 list-style-position: outside;
247}
248ol.arabic {
249 list-style-type: decimal;
250}
251ol.loweralpha {
252 list-style-type: lower-alpha;
253}
254ol.upperalpha {
255 list-style-type: upper-alpha;
256}
257ol.lowerroman {
258 list-style-type: lower-roman;
259}
260ol.upperroman {
261 list-style-type: upper-roman;
262}
263
264div.compact ul, div.compact ol,
265div.compact p, div.compact p,
266div.compact div, div.compact div {
267 margin-top: 0.1em;
268 margin-bottom: 0.1em;
269}
270
271tfoot {
272 font-weight: bold;
273}
274td > div.verse {
275 white-space: pre;
276}
277
278div.hdlist {
279 margin-top: 0.8em;
280 margin-bottom: 0.8em;
281}
282div.hdlist tr {
283 padding-bottom: 15px;
284}
285dt.hdlist1.strong, td.hdlist1.strong {
286 font-weight: bold;
287}
288td.hdlist1 {
289 vertical-align: top;
290 font-style: normal;
291 padding-right: 0.8em;
292 color: navy;
293}
294td.hdlist2 {
295 vertical-align: top;
296}
297div.hdlist.compact tr {
298 margin: 0;
299 padding-bottom: 0;
300}
301
302.comment {
303 background: yellow;
304}
305
306.footnote, .footnoteref {
307 font-size: 0.8em;
308}
309
310span.footnote, span.footnoteref {
311 vertical-align: super;
312}
313
314#footnotes {
315 margin: 20px 0 20px 0;
316 padding: 7px 0 0 0;
317}
318
319#footnotes div.footnote {
320 margin: 0 0 5px 0;
321}
322
323#footnotes hr {
324 border: none;
325 border-top: 1px solid silver;
326 height: 1px;
327 text-align: left;
328 margin-left: 0;
329 width: 20%;
330 min-width: 100px;
331}
332
333div.colist td {
334 padding-right: 0.5em;
335 padding-bottom: 0.3em;
336 vertical-align: top;
337}
338div.colist td img {
339 margin-top: 0.3em;
340}
341
342@media print {
343 #footer-badges { display: none; }
344}
345
346#toc {
347 margin-bottom: 2.5em;
348}
349
350#toctitle {
351 color: #527bbd;
352 font-size: 1.1em;
353 font-weight: bold;
354 margin-top: 1.0em;
355 margin-bottom: 0.1em;
356}
357
358div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
359 margin-top: 0;
360 margin-bottom: 0;
361}
362div.toclevel2 {
363 margin-left: 2em;
364 font-size: 0.9em;
365}
366div.toclevel3 {
367 margin-left: 4em;
368 font-size: 0.9em;
369}
370div.toclevel4 {
371 margin-left: 6em;
372 font-size: 0.9em;
373}
374
375span.aqua { color: aqua; }
376span.black { color: black; }
377span.blue { color: blue; }
378span.fuchsia { color: fuchsia; }
379span.gray { color: gray; }
380span.green { color: green; }
381span.lime { color: lime; }
382span.maroon { color: maroon; }
383span.navy { color: navy; }
384span.olive { color: olive; }
385span.purple { color: purple; }
386span.red { color: red; }
387span.silver { color: silver; }
388span.teal { color: teal; }
389span.white { color: white; }
390span.yellow { color: yellow; }
391
392span.aqua-background { background: aqua; }
393span.black-background { background: black; }
394span.blue-background { background: blue; }
395span.fuchsia-background { background: fuchsia; }
396span.gray-background { background: gray; }
397span.green-background { background: green; }
398span.lime-background { background: lime; }
399span.maroon-background { background: maroon; }
400span.navy-background { background: navy; }
401span.olive-background { background: olive; }
402span.purple-background { background: purple; }
403span.red-background { background: red; }
404span.silver-background { background: silver; }
405span.teal-background { background: teal; }
406span.white-background { background: white; }
407span.yellow-background { background: yellow; }
408
409span.big { font-size: 2em; }
410span.small { font-size: 0.6em; }
411
412span.underline { text-decoration: underline; }
413span.overline { text-decoration: overline; }
414span.line-through { text-decoration: line-through; }
415
416div.unbreakable { page-break-inside: avoid; }
417
418
419/*
420 * xhtml11 specific
421 *
422 * */
423
424div.tableblock {
425 margin-top: 1.0em;
426 margin-bottom: 1.5em;
427}
428div.tableblock > table {
429 border: 3px solid #527bbd;
430}
431thead, p.table.header {
432 font-weight: bold;
433 color: #527bbd;
434}
435p.table {
436 margin-top: 0;
437}
438/* Because the table frame attribute is overriden by CSS in most browsers. */
439div.tableblock > table[frame="void"] {
440 border-style: none;
441}
442div.tableblock > table[frame="hsides"] {
443 border-left-style: none;
444 border-right-style: none;
445}
446div.tableblock > table[frame="vsides"] {
447 border-top-style: none;
448 border-bottom-style: none;
449}
450
451
452/*
453 * html5 specific
454 *
455 * */
456
457table.tableblock {
458 margin-top: 1.0em;
459 margin-bottom: 1.5em;
460}
461thead, p.tableblock.header {
462 font-weight: bold;
463 color: #527bbd;
464}
465p.tableblock {
466 margin-top: 0;
467}
468table.tableblock {
469 border-width: 3px;
470 border-spacing: 0px;
471 border-style: solid;
472 border-color: #527bbd;
473 border-collapse: collapse;
474}
475th.tableblock, td.tableblock {
476 border-width: 1px;
477 padding: 4px;
478 border-style: solid;
479 border-color: #527bbd;
480}
481
482table.tableblock.frame-topbot {
483 border-left-style: hidden;
484 border-right-style: hidden;
485}
486table.tableblock.frame-sides {
487 border-top-style: hidden;
488 border-bottom-style: hidden;
489}
490table.tableblock.frame-none {
491 border-style: hidden;
492}
493
494th.tableblock.halign-left, td.tableblock.halign-left {
495 text-align: left;
496}
497th.tableblock.halign-center, td.tableblock.halign-center {
498 text-align: center;
499}
500th.tableblock.halign-right, td.tableblock.halign-right {
501 text-align: right;
502}
503
504th.tableblock.valign-top, td.tableblock.valign-top {
505 vertical-align: top;
506}
507th.tableblock.valign-middle, td.tableblock.valign-middle {
508 vertical-align: middle;
509}
510th.tableblock.valign-bottom, td.tableblock.valign-bottom {
511 vertical-align: bottom;
512}
513
514
515/*
516 * manpage specific
517 *
518 * */
519
520body.manpage h1 {
521 padding-top: 0.5em;
522 padding-bottom: 0.5em;
523 border-top: 2px solid silver;
524 border-bottom: 2px solid silver;
525}
526body.manpage h2 {
527 border-style: none;
528}
529body.manpage div.sectionbody {
530 margin-left: 3em;
531}
532
533@media print {
534 body.manpage div#toc { display: none; }
535}
536
537
538div.listingblock > div.content {
539 background: rgb(28, 28, 28);
540}
541
542div.listingblock > div > pre > code {
543 color: rgb(187, 187, 187);
544}
545</style>
546<script type="text/javascript">
547/*<![CDATA[*/
548var asciidoc = { // Namespace.
549
550/////////////////////////////////////////////////////////////////////
551// Table Of Contents generator
552/////////////////////////////////////////////////////////////////////
553
554/* Author: Mihai Bazon, September 2002
555 * http://students.infoiasi.ro/~mishoo
556 *
557 * Table Of Content generator
558 * Version: 0.4
559 *
560 * Feel free to use this script under the terms of the GNU General Public
561 * License, as long as you do not remove or alter this notice.
562 */
563
564 /* modified by Troy D. Hanson, September 2006. License: GPL */
565 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
566
567// toclevels = 1..4.
568toc: function (toclevels) {
569
570 function getText(el) {
571 var text = "";
572 for (var i = el.firstChild; i != null; i = i.nextSibling) {
573 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
574 text += i.data;
575 else if (i.firstChild != null)
576 text += getText(i);
577 }
578 return text;
579 }
580
581 function TocEntry(el, text, toclevel) {
582 this.element = el;
583 this.text = text;
584 this.toclevel = toclevel;
585 }
586
587 function tocEntries(el, toclevels) {
588 var result = new Array;
589 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
590 // Function that scans the DOM tree for header elements (the DOM2
591 // nodeIterator API would be a better technique but not supported by all
592 // browsers).
593 var iterate = function (el) {
594 for (var i = el.firstChild; i != null; i = i.nextSibling) {
595 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
596 var mo = re.exec(i.tagName);
597 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
598 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
599 }
600 iterate(i);
601 }
602 }
603 }
604 iterate(el);
605 return result;
606 }
607
608 var toc = document.getElementById("toc");
609 if (!toc) {
610 return;
611 }
612
613 // Delete existing TOC entries in case we're reloading the TOC.
614 var tocEntriesToRemove = [];
615 var i;
616 for (i = 0; i < toc.childNodes.length; i++) {
617 var entry = toc.childNodes[i];
618 if (entry.nodeName.toLowerCase() == 'div'
619 && entry.getAttribute("class")
620 && entry.getAttribute("class").match(/^toclevel/))
621 tocEntriesToRemove.push(entry);
622 }
623 for (i = 0; i < tocEntriesToRemove.length; i++) {
624 toc.removeChild(tocEntriesToRemove[i]);
625 }
626
627 // Rebuild TOC entries.
628 var entries = tocEntries(document.getElementById("content"), toclevels);
629 for (var i = 0; i < entries.length; ++i) {
630 var entry = entries[i];
631 if (entry.element.id == "")
632 entry.element.id = "_toc_" + i;
633 var a = document.createElement("a");
634 a.href = "#" + entry.element.id;
635 a.appendChild(document.createTextNode(entry.text));
636 var div = document.createElement("div");
637 div.appendChild(a);
638 div.className = "toclevel" + entry.toclevel;
639 toc.appendChild(div);
640 }
641 if (entries.length == 0)
642 toc.parentNode.removeChild(toc);
643},
644
645
646/////////////////////////////////////////////////////////////////////
647// Footnotes generator
648/////////////////////////////////////////////////////////////////////
649
650/* Based on footnote generation code from:
651 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
652 */
653
654footnotes: function () {
655 // Delete existing footnote entries in case we're reloading the footnodes.
656 var i;
657 var noteholder = document.getElementById("footnotes");
658 if (!noteholder) {
659 return;
660 }
661 var entriesToRemove = [];
662 for (i = 0; i < noteholder.childNodes.length; i++) {
663 var entry = noteholder.childNodes[i];
664 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
665 entriesToRemove.push(entry);
666 }
667 for (i = 0; i < entriesToRemove.length; i++) {
668 noteholder.removeChild(entriesToRemove[i]);
669 }
670
671 // Rebuild footnote entries.
672 var cont = document.getElementById("content");
673 var spans = cont.getElementsByTagName("span");
674 var refs = {};
675 var n = 0;
676 for (i=0; i<spans.length; i++) {
677 if (spans[i].className == "footnote") {
678 n++;
679 var note = spans[i].getAttribute("data-note");
680 if (!note) {
681 // Use [\s\S] in place of . so multi-line matches work.
682 // Because JavaScript has no s (dotall) regex flag.
683 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
684 spans[i].innerHTML =
685 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
686 "' title='View footnote' class='footnote'>" + n + "</a>]";
687 spans[i].setAttribute("data-note", note);
688 }
689 noteholder.innerHTML +=
690 "<div class='footnote' id='_footnote_" + n + "'>" +
691 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
692 n + "</a>. " + note + "</div>";
693 var id =spans[i].getAttribute("id");
694 if (id != null) refs["#"+id] = n;
695 }
696 }
697 if (n == 0)
698 noteholder.parentNode.removeChild(noteholder);
699 else {
700 // Process footnoterefs.
701 for (i=0; i<spans.length; i++) {
702 if (spans[i].className == "footnoteref") {
703 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
704 href = href.match(/#.*/)[0]; // Because IE return full URL.
705 n = refs[href];
706 spans[i].innerHTML =
707 "[<a href='#_footnote_" + n +
708 "' title='View footnote' class='footnote'>" + n + "</a>]";
709 }
710 }
711 }
712},
713
714install: function(toclevels) {
715 var timerId;
716
717 function reinstall() {
718 asciidoc.footnotes();
719 if (toclevels) {
720 asciidoc.toc(toclevels);
721 }
722 }
723
724 function reinstallAndRemoveTimer() {
725 clearInterval(timerId);
726 reinstall();
727 }
728
729 timerId = setInterval(reinstall, 500);
730 if (document.addEventListener)
731 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
732 else
733 window.onload = reinstallAndRemoveTimer;
734}
735
736}
737asciidoc.install();
738/*]]>*/
739</script>
740</head>
741<body class="manpage">
742<div id="header">
743<h1>
744git-hyper-blame(1) Manual Page
745</h1>
746<h2>NAME</h2>
747<div class="sectionbody">
748<p>git-hyper-blame -
749 Like git blame, but with the ability to ignore or bypass certain commits.
750</p>
751</div>
752</div>
753<div id="content">
754<div class="sect1">
755<h2 id="_synopsis">SYNOPSIS</h2>
756<div class="sectionbody">
757<div class="verseblock">
758<pre class="content"><em>git hyper-blame</em> [-i &lt;rev&gt; [-i &lt;rev&gt; &#8230;]] [&lt;rev&gt;] [--] &lt;file&gt;</pre>
759<div class="attribution">
760</div></div>
761</div>
762</div>
763<div class="sect1">
764<h2 id="_description">DESCRIPTION</h2>
765<div class="sectionbody">
766<div class="paragraph"><p><code>git hyper-blame</code> is like <code>git blame</code> but it can ignore or "look through" a
767given set of commits, to find the real culprit.</p></div>
768<div class="paragraph"><p>This is useful if you have a commit that makes sweeping changes that are
769unlikely to be what you are looking for in a blame, such as mass reformatting or
770renaming. By adding these commits to the hyper-blame ignore list, <code>git
771hyper-blame</code> will look past these commits to find the previous commit that
772touched a given line.</p></div>
773<div class="paragraph"><p>Follows the normal <code>blame</code> syntax: annotates <code>&lt;file&gt;</code> with the revision that
774last modified each line. Optional <code>&lt;rev&gt;</code> specifies the revision of <code>&lt;file&gt;</code> to
775start from.</p></div>
776</div>
777</div>
778<div class="sect1">
779<h2 id="_options">OPTIONS</h2>
780<div class="sectionbody">
781<div class="dlist"><dl>
782<dt class="hdlist1">
783-i &lt;rev&gt;
784</dt>
785<dd>
786<p>
787 A revision to ignore. Can be specified as many times as needed.
788</p>
789</dd>
790</dl></div>
791</div>
792</div>
793<div class="sect1">
794<h2 id="_example">EXAMPLE</h2>
795<div class="sectionbody">
796<div class="paragraph"><p>Let&#8217;s run <code>git blame</code> on a file:</p></div>
797<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git blame ipsum.txt</span>
798c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 1) LOREM IPSUM DOLOR SIT AMET, CONSECTETUR
7993ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 2) ADIPISCING ELIT, SED DO EIUSMOD TEMPOR
8003ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 3) INCIDIDUNT UT LABORE ET DOLORE MAGNA
8013ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 4) ALIQUA. UT ENIM AD MINIM VENIAM, QUIS
802c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 5) NOSTRUD EXERCITATION ULLAMCO LABORIS
8033ddda43c (auto-uppercaser 2014-07-05 02:05:18 +0000 6) NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.
804</code></pre></div></div><p><div class="paragraph"></p></div>
805<div class="paragraph"><p>Notice that almost the entire file has been blamed on a formatting change? You
806aren&#8217;t interested in the uppercasing of the file. You want to know who
807wrote/modified those lines in the first place. Just tell <code>hyper-blame</code> to ignore
808that commit:</p></div>
809<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git hyper-blame -i 3ddda43c ipsum.txt</span>
810c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 1) LOREM IPSUM DOLOR SIT AMET, CONSECTETUR
811134200d1 (lorem 2014-04-10 08:54:46 +0000 2*) ADIPISCING ELIT, SED DO EIUSMOD TEMPOR
812a34a1d0d (ipsum 2014-04-11 11:25:04 +0000 3*) INCIDIDUNT UT LABORE ET DOLORE MAGNA
813134200d1 (lorem 2014-04-10 08:54:46 +0000 4*) ALIQUA. UT ENIM AD MINIM VENIAM, QUIS
814c6eb3bfa (lorem 2014-08-11 23:15:57 +0000 5) NOSTRUD EXERCITATION ULLAMCO LABORIS
8150f0d17bd (dolor 2014-06-02 11:31:48 +0000 6*) NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.
816</code></pre></div></div><p><div class="paragraph"></p></div>
817<div class="paragraph"><p><code>hyper-blame</code> places a <code>*</code> next to any line where it has skipped over an ignored
818commit, so you know that the line in question has been changed (by an ignored
819commit) since the given person wrote it.</p></div>
820</div>
821</div>
822<div class="sect1">
mgiuca@chromium.org01d2cde2016-02-05 03:25:41 +0000823<h2 id="_caveats">CAVEATS</h2>
824<div class="sectionbody">
825<div class="paragraph"><p>When a line skips over an ignored commit, a guess is made as to which commit
826previously modified that line, but it is not always clear where the line came
827from. If the ignored commit makes lots of changes in close proximity, in
828particular adding/removing/reordering lines, then the wrong authors may be
829blamed for nearby edits.</p></div>
830<div class="paragraph"><p>For this reason, <code>hyper-blame</code> works best when the ignored commits are be
831limited to minor changes such as formatting and renaming, not refactoring or
832other more invasive changes.</p></div>
833</div>
834</div>
835<div class="sect1">
mgiuca@chromium.org81937562016-02-03 08:00:53 +0000836<h2 id="_bugs">BUGS</h2>
837<div class="sectionbody">
838<div class="ulist"><ul>
839<li>
840<p>
mgiuca@chromium.org81937562016-02-03 08:00:53 +0000841There is currently no way to pass the ignore list as a file.
842</p>
843</li>
844<li>
845<p>
846It should be possible for a git repository to configure an automatic list of
847 commits to ignore (like <code>.gitignore</code>), so that project owners can maintain a
848 list of "big change" commits that are ignored by hyper-blame by default.
849</p>
850</li>
851</ul></div>
852</div>
853</div>
854<div class="sect1">
855<h2 id="_see_also">SEE ALSO</h2>
856<div class="sectionbody">
857<div class="paragraph"><p><a href="git-blame.html">git-blame(1)</a></p></div>
858</div>
859</div>
860<div class="sect1">
861<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
862<div class="sectionbody">
863<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
864assist with the development of chromium and related projects. Download the tools
865from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
866</div>
867</div>
868</div>
869<div id="footnotes"><hr /></div>
870<div id="footer">
871<div id="footer-text">
mgiuca@chromium.org01d2cde2016-02-05 03:25:41 +0000872Last updated 2016-02-05 13:43:52 AEDT
mgiuca@chromium.org81937562016-02-03 08:00:53 +0000873</div>
874</div>
875</body>
876</html>