Autogenerated HTML docs for v2.47.0-rc1
[git-htmldocs.git] / gitdiffcore.html
blob3be9a025dde96f05a78bdbadad7a69022afe35d1
1 <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
3 <head>
4 <meta charset="UTF-8"/>
5 <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7 <meta name="generator" content="Asciidoctor 2.0.20"/>
8 <title>gitdiffcore(7)</title>
9 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"/>
10 <style>
11 /*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
12 /* Uncomment the following line when using as a custom stylesheet */
13 /* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
14 html{font-family:sans-serif;-webkit-text-size-adjust:100%}
15 a{background:none}
16 a:focus{outline:thin dotted}
17 a:active,a:hover{outline:0}
18 h1{font-size:2em;margin:.67em 0}
19 b,strong{font-weight:bold}
20 abbr{font-size:.9em}
21 abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
22 dfn{font-style:italic}
23 hr{height:0}
24 mark{background:#ff0;color:#000}
25 code,kbd,pre,samp{font-family:monospace;font-size:1em}
26 pre{white-space:pre-wrap}
27 q{quotes:"\201C" "\201D" "\2018" "\2019"}
28 small{font-size:80%}
29 sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
30 sup{top:-.5em}
31 sub{bottom:-.25em}
32 img{border:0}
33 svg:not(:root){overflow:hidden}
34 figure{margin:0}
35 audio,video{display:inline-block}
36 audio:not([controls]){display:none;height:0}
37 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
38 legend{border:0;padding:0}
39 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
40 button,input{line-height:normal}
41 button,select{text-transform:none}
42 button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
43 button[disabled],html input[disabled]{cursor:default}
44 input[type=checkbox],input[type=radio]{padding:0}
45 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
46 textarea{overflow:auto;vertical-align:top}
47 table{border-collapse:collapse;border-spacing:0}
48 *,::before,::after{box-sizing:border-box}
49 html,body{font-size:100%}
50 body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
51 a:hover{cursor:pointer}
52 img,object,embed{max-width:100%;height:auto}
53 object,embed{height:100%}
54 img{-ms-interpolation-mode:bicubic}
55 .left{float:left!important}
56 .right{float:right!important}
57 .text-left{text-align:left!important}
58 .text-right{text-align:right!important}
59 .text-center{text-align:center!important}
60 .text-justify{text-align:justify!important}
61 .hide{display:none}
62 img,object,svg{display:inline-block;vertical-align:middle}
63 textarea{height:auto;min-height:50px}
64 select{width:100%}
65 .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
66 div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
67 a{color:#2156a5;text-decoration:underline;line-height:inherit}
68 a:hover,a:focus{color:#1d4b8f}
69 a img{border:0}
70 p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
71 p aside{font-size:.875em;line-height:1.35;font-style:italic}
72 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
73 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
74 h1{font-size:2.125em}
75 h2{font-size:1.6875em}
76 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
77 h4,h5{font-size:1.125em}
78 h6{font-size:1em}
79 hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
80 em,i{font-style:italic;line-height:inherit}
81 strong,b{font-weight:bold;line-height:inherit}
82 small{font-size:60%;line-height:inherit}
83 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
84 ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
85 ul,ol{margin-left:1.5em}
86 ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
87 ul.circle{list-style-type:circle}
88 ul.disc{list-style-type:disc}
89 ul.square{list-style-type:square}
90 ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
91 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
92 dl dt{margin-bottom:.3125em;font-weight:bold}
93 dl dd{margin-bottom:1.25em}
94 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
95 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
96 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
97 h1{font-size:2.75em}
98 h2{font-size:2.3125em}
99 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
100 h4{font-size:1.4375em}}
101 table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
102 table thead,table tfoot{background:#f7f8f7}
103 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
104 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
105 table tr.even,table tr.alt{background:#f8f8f7}
106 table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
107 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
108 h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
109 .center{margin-left:auto;margin-right:auto}
110 .stretch{width:100%}
111 .clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
112 .clearfix::after,.float-group::after{clear:both}
113 :not(pre).nobreak{word-wrap:normal}
114 :not(pre).nowrap{white-space:nowrap}
115 :not(pre).pre-wrap{white-space:pre-wrap}
116 :not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
117 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
118 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
119 pre>code{display:block}
120 pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
121 em em{font-style:normal}
122 strong strong{font-weight:400}
123 .keyseq{color:rgba(51,51,51,.8)}
124 kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
125 .keyseq kbd:first-child{margin-left:0}
126 .keyseq kbd:last-child{margin-right:0}
127 .menuseq,.menuref{color:#000}
128 .menuseq b:not(.caret),.menuref{font-weight:inherit}
129 .menuseq{word-spacing:-.02em}
130 .menuseq b.caret{font-size:1.25em;line-height:.8}
131 .menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
132 b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
133 b.button::before{content:"[";padding:0 3px 0 2px}
134 b.button::after{content:"]";padding:0 2px 0 3px}
135 p a>code:hover{color:rgba(0,0,0,.9)}
136 #header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
137 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
138 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
139 #content{margin-top:1.25em}
140 #content::before{content:none}
141 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
142 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
143 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
144 #header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
145 #header .details span:first-child{margin-left:-.125em}
146 #header .details span.email a{color:rgba(0,0,0,.85)}
147 #header .details br{display:none}
148 #header .details br+span::before{content:"\00a0\2013\00a0"}
149 #header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
150 #header .details br+span#revremark::before{content:"\00a0|\00a0"}
151 #header #revnumber{text-transform:capitalize}
152 #header #revnumber::after{content:"\00a0"}
153 #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
154 #toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
155 #toc>ul{margin-left:.125em}
156 #toc ul.sectlevel0>li>a{font-style:italic}
157 #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
158 #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
159 #toc li{line-height:1.3334;margin-top:.3334em}
160 #toc a{text-decoration:none}
161 #toc a:active{text-decoration:underline}
162 #toctitle{color:#7a2518;font-size:1.2em}
163 @media screen and (min-width:768px){#toctitle{font-size:1.375em}
164 body.toc2{padding-left:15em;padding-right:0}
165 #toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
166 #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
167 #toc.toc2>ul{font-size:.9em;margin-bottom:0}
168 #toc.toc2 ul ul{margin-left:0;padding-left:1em}
169 #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
170 body.toc2.toc-right{padding-left:0;padding-right:15em}
171 body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
172 @media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
173 #toc.toc2{width:20em}
174 #toc.toc2 #toctitle{font-size:1.375em}
175 #toc.toc2>ul{font-size:.95em}
176 #toc.toc2 ul ul{padding-left:1.25em}
177 body.toc2.toc-right{padding-left:0;padding-right:20em}}
178 #content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
179 #content #toc>:first-child{margin-top:0}
180 #content #toc>:last-child{margin-bottom:0}
181 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
182 #footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
183 #content{margin-bottom:.625em}
184 .sect1{padding-bottom:.625em}
185 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
186 .sect1{padding-bottom:1.25em}}
187 .sect1:last-child{padding-bottom:0}
188 .sect1+.sect1{border-top:1px solid #e7e7e9}
189 #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
190 #content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
191 #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
192 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
193 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
194 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
195 details{margin-left:1.25rem}
196 details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
197 details>summary::-webkit-details-marker{display:none}
198 details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
199 details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
200 details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
201 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
202 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
203 .paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
204 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
205 .admonitionblock>table td.icon{text-align:center;width:80px}
206 .admonitionblock>table td.icon img{max-width:none}
207 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
208 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
209 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
210 .exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
211 .sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
212 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
213 .exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
214 .exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
215 .literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
216 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
217 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
218 .literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
219 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
220 .listingblock>.content{position:relative}
221 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
222 .listingblock:hover code[data-lang]::before{display:block}
223 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
224 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
225 .listingblock pre.highlightjs{padding:0}
226 .listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
227 .listingblock pre.prettyprint{border-width:0}
228 .prettyprint{background:#f7f7f8}
229 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
230 pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
231 pre.prettyprint li code[data-lang]::before{opacity:1}
232 pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
233 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
234 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
235 table.linenotable td.code{padding-left:.75em}
236 table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
237 pre.pygments span.linenos{display:inline-block;margin-right:.75em}
238 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
239 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
240 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
241 .quoteblock blockquote{margin:0;padding:0;border:0}
242 .quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
243 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
244 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
245 .verseblock{margin:0 1em 1.25em}
246 .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
247 .verseblock pre strong{font-weight:400}
248 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
249 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
250 .quoteblock .attribution br,.verseblock .attribution br{display:none}
251 .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
252 .quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
253 .quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
254 .quoteblock.abstract{margin:0 1em 1.25em;display:block}
255 .quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
256 .quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
257 .quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
258 .quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
259 .quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
260 p.tableblock:last-child{margin-bottom:0}
261 td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
262 td.tableblock>.content>:last-child{margin-bottom:-1.25em}
263 table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
264 table.grid-all>*>tr>*{border-width:1px}
265 table.grid-cols>*>tr>*{border-width:0 1px}
266 table.grid-rows>*>tr>*{border-width:1px 0}
267 table.frame-all{border-width:1px}
268 table.frame-ends{border-width:1px 0}
269 table.frame-sides{border-width:0 1px}
270 table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
271 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
272 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
273 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
274 table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
275 th.halign-left,td.halign-left{text-align:left}
276 th.halign-right,td.halign-right{text-align:right}
277 th.halign-center,td.halign-center{text-align:center}
278 th.valign-top,td.valign-top{vertical-align:top}
279 th.valign-bottom,td.valign-bottom{vertical-align:bottom}
280 th.valign-middle,td.valign-middle{vertical-align:middle}
281 table thead th,table tfoot th{font-weight:bold}
282 tbody tr th{background:#f7f8f7}
283 tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
284 p.tableblock>code:only-child{background:none;padding:0}
285 p.tableblock{font-size:1em}
286 ol{margin-left:1.75em}
287 ul li ol{margin-left:1.5em}
288 dl dd{margin-left:1.125em}
289 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
290 li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
291 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
292 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
293 ul.unstyled,ol.unstyled{margin-left:0}
294 li>p:empty:only-child::before{content:"";display:inline-block}
295 ul.checklist>li>p:first-child{margin-left:-1em}
296 ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
297 ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
298 ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
299 ul.inline>li{margin-left:1.25em}
300 .unstyled dl dt{font-weight:400;font-style:normal}
301 ol.arabic{list-style-type:decimal}
302 ol.decimal{list-style-type:decimal-leading-zero}
303 ol.loweralpha{list-style-type:lower-alpha}
304 ol.upperalpha{list-style-type:upper-alpha}
305 ol.lowerroman{list-style-type:lower-roman}
306 ol.upperroman{list-style-type:upper-roman}
307 ol.lowergreek{list-style-type:lower-greek}
308 .hdlist>table,.colist>table{border:0;background:none}
309 .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
310 td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
311 td.hdlist1{font-weight:bold;padding-bottom:1.25em}
312 td.hdlist2{word-wrap:anywhere}
313 .literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
314 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
315 .colist td:not([class]):first-child img{max-width:none}
316 .colist td:not([class]):last-child{padding:.25em 0}
317 .thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
318 .imageblock.left{margin:.25em .625em 1.25em 0}
319 .imageblock.right{margin:.25em 0 1.25em .625em}
320 .imageblock>.title{margin-bottom:0}
321 .imageblock.thumb,.imageblock.th{border-width:6px}
322 .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
323 .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
324 .image.left{margin-right:.625em}
325 .image.right{margin-left:.625em}
326 a.image{text-decoration:none;display:inline-block}
327 a.image object{pointer-events:none}
328 sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
329 sup.footnote a,sup.footnoteref a{text-decoration:none}
330 sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
331 #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
332 #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
333 #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
334 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
335 #footnotes .footnote:last-of-type{margin-bottom:0}
336 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
337 div.unbreakable{page-break-inside:avoid}
338 .big{font-size:larger}
339 .small{font-size:smaller}
340 .underline{text-decoration:underline}
341 .overline{text-decoration:overline}
342 .line-through{text-decoration:line-through}
343 .aqua{color:#00bfbf}
344 .aqua-background{background:#00fafa}
345 .black{color:#000}
346 .black-background{background:#000}
347 .blue{color:#0000bf}
348 .blue-background{background:#0000fa}
349 .fuchsia{color:#bf00bf}
350 .fuchsia-background{background:#fa00fa}
351 .gray{color:#606060}
352 .gray-background{background:#7d7d7d}
353 .green{color:#006000}
354 .green-background{background:#007d00}
355 .lime{color:#00bf00}
356 .lime-background{background:#00fa00}
357 .maroon{color:#600000}
358 .maroon-background{background:#7d0000}
359 .navy{color:#000060}
360 .navy-background{background:#00007d}
361 .olive{color:#606000}
362 .olive-background{background:#7d7d00}
363 .purple{color:#600060}
364 .purple-background{background:#7d007d}
365 .red{color:#bf0000}
366 .red-background{background:#fa0000}
367 .silver{color:#909090}
368 .silver-background{background:#bcbcbc}
369 .teal{color:#006060}
370 .teal-background{background:#007d7d}
371 .white{color:#bfbfbf}
372 .white-background{background:#fafafa}
373 .yellow{color:#bfbf00}
374 .yellow-background{background:#fafa00}
375 span.icon>.fa{cursor:default}
376 a span.icon>.fa{cursor:inherit}
377 .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
378 .admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
379 .admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
380 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
381 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
382 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
383 .conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
384 .conum[data-value] *{color:#fff!important}
385 .conum[data-value]+b{display:none}
386 .conum[data-value]::after{content:attr(data-value)}
387 pre .conum[data-value]{position:relative;top:-.125em}
388 b.conum *{color:inherit!important}
389 .conum:not([data-value]):empty{display:none}
390 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
391 h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
392 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
393 p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
394 p{margin-bottom:1.25rem}
395 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
396 .exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
397 .print-only{display:none!important}
398 @page{margin:1.25cm .75cm}
399 @media print{*{box-shadow:none!important;text-shadow:none!important}
400 html{font-size:80%}
401 a{color:inherit!important;text-decoration:underline!important}
402 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
403 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
404 abbr[title]{border-bottom:1px dotted}
405 abbr[title]::after{content:" (" attr(title) ")"}
406 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
407 thead{display:table-header-group}
408 svg{max-width:100%}
409 p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
410 h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
411 #header,#content,#footnotes,#footer{max-width:none}
412 #toc,.sidebarblock,.exampleblock>.content{background:none!important}
413 #toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
414 body.book #header{text-align:center}
415 body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
416 body.book #header .details{border:0!important;display:block;padding:0!important}
417 body.book #header .details span:first-child{margin-left:0!important}
418 body.book #header .details br{display:block}
419 body.book #header .details br+span::before{content:none!important}
420 body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
421 body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
422 .listingblock code[data-lang]::before{display:block}
423 #footer{padding:0 .9375em}
424 .hide-on-print{display:none!important}
425 .print-only{display:block!important}
426 .hide-for-print{display:none!important}
427 .show-for-print{display:inherit!important}}
428 @media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
429 .sect1{padding:0!important}
430 .sect1+.sect1{border:0}
431 #footer{background:none}
432 #footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
433 @media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
434 </style>
435 <style>
436 pre>code {
437 display: inline;
439 </style>
440 </head>
441 <body class="manpage">
442 <div id="header">
443 <h1>gitdiffcore(7) Manual Page</h1>
444 <h2 id="_name">NAME</h2>
445 <div class="sectionbody">
446 <p>gitdiffcore - Tweaking diff output</p>
447 </div>
448 </div>
449 <div id="content">
450 <div class="sect1">
451 <h2 id="_synopsis">SYNOPSIS</h2>
452 <div class="sectionbody">
453 <div class="verseblock">
454 <pre class="content"><em>git diff</em> *</pre>
455 </div>
456 </div>
457 </div>
458 <div class="sect1">
459 <h2 id="_description">DESCRIPTION</h2>
460 <div class="sectionbody">
461 <div class="paragraph">
462 <p>The diff commands <em>git diff-index</em>, <em>git diff-files</em>, and <em>git diff-tree</em>
463 can be told to manipulate differences they find in
464 unconventional ways before showing <em>diff</em> output. The manipulation
465 is collectively called "diffcore transformation". This short note
466 describes what they are and how to use them to produce <em>diff</em> output
467 that is easier to understand than the conventional kind.</p>
468 </div>
469 </div>
470 </div>
471 <div class="sect1">
472 <h2 id="_the_chain_of_operation">The chain of operation</h2>
473 <div class="sectionbody">
474 <div class="paragraph">
475 <p>The <em>git diff-*</em> family works by first comparing two sets of
476 files:</p>
477 </div>
478 <div class="ulist">
479 <ul>
480 <li>
481 <p><em>git diff-index</em> compares contents of a "tree" object and the
482 working directory (when <code>--cached</code> flag is not used) or a
483 "tree" object and the index file (when <code>--cached</code> flag is
484 used);</p>
485 </li>
486 <li>
487 <p><em>git diff-files</em> compares contents of the index file and the
488 working directory;</p>
489 </li>
490 <li>
491 <p><em>git diff-tree</em> compares contents of two "tree" objects;</p>
492 </li>
493 </ul>
494 </div>
495 <div class="paragraph">
496 <p>In all of these cases, the commands themselves first optionally limit
497 the two sets of files by any pathspecs given on their command-lines,
498 and compare corresponding paths in the two resulting sets of files.</p>
499 </div>
500 <div class="paragraph">
501 <p>The pathspecs are used to limit the world diff operates in. They remove
502 the filepairs outside the specified sets of pathnames. E.g. If the
503 input set of filepairs included:</p>
504 </div>
505 <div class="listingblock">
506 <div class="content">
507 <pre>:100644 100644 bcd1234... 0123456... M junkfile</pre>
508 </div>
509 </div>
510 <div class="paragraph">
511 <p>but the command invocation was <code>git diff-files myfile</code>, then the
512 junkfile entry would be removed from the list because only "myfile"
513 is under consideration.</p>
514 </div>
515 <div class="paragraph">
516 <p>The result of comparison is passed from these commands to what is
517 internally called "diffcore", in a format similar to what is output
518 when the -p option is not used. E.g.</p>
519 </div>
520 <div class="listingblock">
521 <div class="content">
522 <pre>in-place edit :100644 100644 bcd1234... 0123456... M file0
523 create :000000 100644 0000000... 1234567... A file4
524 delete :100644 000000 1234567... 0000000... D file5
525 unmerged :000000 000000 0000000... 0000000... U file6</pre>
526 </div>
527 </div>
528 <div class="paragraph">
529 <p>The diffcore mechanism is fed a list of such comparison results
530 (each of which is called "filepair", although at this point each
531 of them talks about a single file), and transforms such a list
532 into another list. There are currently 5 such transformations:</p>
533 </div>
534 <div class="ulist">
535 <ul>
536 <li>
537 <p>diffcore-break</p>
538 </li>
539 <li>
540 <p>diffcore-rename</p>
541 </li>
542 <li>
543 <p>diffcore-merge-broken</p>
544 </li>
545 <li>
546 <p>diffcore-pickaxe</p>
547 </li>
548 <li>
549 <p>diffcore-order</p>
550 </li>
551 <li>
552 <p>diffcore-rotate</p>
553 </li>
554 </ul>
555 </div>
556 <div class="paragraph">
557 <p>These are applied in sequence. The set of filepairs <em>git diff-*</em>
558 commands find are used as the input to diffcore-break, and
559 the output from diffcore-break is used as the input to the
560 next transformation. The final result is then passed to the
561 output routine and generates either diff-raw format (see Output
562 format sections of the manual for <em>git diff-*</em> commands) or
563 diff-patch format.</p>
564 </div>
565 </div>
566 </div>
567 <div class="sect1">
568 <h2 id="_diffcore_break_for_splitting_up_complete_rewrites">diffcore-break: For Splitting Up Complete Rewrites</h2>
569 <div class="sectionbody">
570 <div class="paragraph">
571 <p>The second transformation in the chain is diffcore-break, and is
572 controlled by the -B option to the <em>git diff-*</em> commands. This is
573 used to detect a filepair that represents "complete rewrite" and
574 break such filepair into two filepairs that represent delete and
575 create. E.g. If the input contained this filepair:</p>
576 </div>
577 <div class="listingblock">
578 <div class="content">
579 <pre>:100644 100644 bcd1234... 0123456... M file0</pre>
580 </div>
581 </div>
582 <div class="paragraph">
583 <p>and if it detects that the file "file0" is completely rewritten,
584 it changes it to:</p>
585 </div>
586 <div class="listingblock">
587 <div class="content">
588 <pre>:100644 000000 bcd1234... 0000000... D file0
589 :000000 100644 0000000... 0123456... A file0</pre>
590 </div>
591 </div>
592 <div class="paragraph">
593 <p>For the purpose of breaking a filepair, diffcore-break examines
594 the extent of changes between the contents of the files before
595 and after modification (i.e. the contents that have "bcd1234&#8230;&#8203;"
596 and "0123456&#8230;&#8203;" as their SHA-1 content ID, in the above
597 example). The amount of deletion of original contents and
598 insertion of new material are added together, and if it exceeds
599 the "break score", the filepair is broken into two. The break
600 score defaults to 50% of the size of the smaller of the original
601 and the result (i.e. if the edit shrinks the file, the size of
602 the result is used; if the edit lengthens the file, the size of
603 the original is used), and can be customized by giving a number
604 after "-B" option (e.g. "-B75" to tell it to use 75%).</p>
605 </div>
606 </div>
607 </div>
608 <div class="sect1">
609 <h2 id="_diffcore_rename_for_detecting_renames_and_copies">diffcore-rename: For Detecting Renames and Copies</h2>
610 <div class="sectionbody">
611 <div class="paragraph">
612 <p>This transformation is used to detect renames and copies, and is
613 controlled by the -M option (to detect renames) and the -C option
614 (to detect copies as well) to the <em>git diff-*</em> commands. If the
615 input contained these filepairs:</p>
616 </div>
617 <div class="listingblock">
618 <div class="content">
619 <pre>:100644 000000 0123456... 0000000... D fileX
620 :000000 100644 0000000... 0123456... A file0</pre>
621 </div>
622 </div>
623 <div class="paragraph">
624 <p>and the contents of the deleted file fileX is similar enough to
625 the contents of the created file file0, then rename detection
626 merges these filepairs and creates:</p>
627 </div>
628 <div class="listingblock">
629 <div class="content">
630 <pre>:100644 100644 0123456... 0123456... R100 fileX file0</pre>
631 </div>
632 </div>
633 <div class="paragraph">
634 <p>When the "-C" option is used, the original contents of modified files,
635 and deleted files (and also unmodified files, if the
636 "--find-copies-harder" option is used) are considered as candidates
637 of the source files in rename/copy operation. If the input were like
638 these filepairs, that talk about a modified file fileY and a newly
639 created file file0:</p>
640 </div>
641 <div class="listingblock">
642 <div class="content">
643 <pre>:100644 100644 0123456... 1234567... M fileY
644 :000000 100644 0000000... bcd3456... A file0</pre>
645 </div>
646 </div>
647 <div class="paragraph">
648 <p>the original contents of fileY and the resulting contents of
649 file0 are compared, and if they are similar enough, they are
650 changed to:</p>
651 </div>
652 <div class="listingblock">
653 <div class="content">
654 <pre>:100644 100644 0123456... 1234567... M fileY
655 :100644 100644 0123456... bcd3456... C100 fileY file0</pre>
656 </div>
657 </div>
658 <div class="paragraph">
659 <p>In both rename and copy detection, the same "extent of changes"
660 algorithm used in diffcore-break is used to determine if two
661 files are "similar enough", and can be customized to use
662 a similarity score different from the default of 50% by giving a
663 number after the "-M" or "-C" option (e.g. "-M8" to tell it to use
664 8/10 = 80%).</p>
665 </div>
666 <div class="paragraph">
667 <p>Note that when rename detection is on but both copy and break
668 detection are off, rename detection adds a preliminary step that first
669 checks if files are moved across directories while keeping their
670 filename the same. If there is a file added to a directory whose
671 contents are sufficiently similar to a file with the same name that got
672 deleted from a different directory, it will mark them as renames and
673 exclude them from the later quadratic step (the one that pairwise
674 compares all unmatched files to find the "best" matches, determined by
675 the highest content similarity). So, for example, if a deleted
676 docs/ext.txt and an added docs/config/ext.txt are similar enough, they
677 will be marked as a rename and prevent an added docs/ext.md that may
678 be even more similar to the deleted docs/ext.txt from being considered
679 as the rename destination in the later step. For this reason, the
680 preliminary "match same filename" step uses a bit higher threshold to
681 mark a file pair as a rename and stop considering other candidates for
682 better matches. At most, one comparison is done per file in this
683 preliminary pass; so if there are several remaining ext.txt files
684 throughout the directory hierarchy after exact rename detection, this
685 preliminary step may be skipped for those files.</p>
686 </div>
687 <div class="paragraph">
688 <p>Note. When the "-C" option is used with <code>--find-copies-harder</code>
689 option, <em>git diff-*</em> commands feed unmodified filepairs to
690 diffcore mechanism as well as modified ones. This lets the copy
691 detector consider unmodified files as copy source candidates at
692 the expense of making it slower. Without <code>--find-copies-harder</code>,
693 <em>git diff-*</em> commands can detect copies only if the file that was
694 copied happened to have been modified in the same changeset.</p>
695 </div>
696 </div>
697 </div>
698 <div class="sect1">
699 <h2 id="_diffcore_merge_broken_for_putting_complete_rewrites_back_together">diffcore-merge-broken: For Putting Complete Rewrites Back Together</h2>
700 <div class="sectionbody">
701 <div class="paragraph">
702 <p>This transformation is used to merge filepairs broken by
703 diffcore-break, and not transformed into rename/copy by
704 diffcore-rename, back into a single modification. This always
705 runs when diffcore-break is used.</p>
706 </div>
707 <div class="paragraph">
708 <p>For the purpose of merging broken filepairs back, it uses a
709 different "extent of changes" computation from the ones used by
710 diffcore-break and diffcore-rename. It counts only the deletion
711 from the original, and does not count insertion. If you removed
712 only 10 lines from a 100-line document, even if you added 910
713 new lines to make a new 1000-line document, you did not do a
714 complete rewrite. diffcore-break breaks such a case in order to
715 help diffcore-rename to consider such filepairs as a candidate of
716 rename/copy detection, but if filepairs broken that way were not
717 matched with other filepairs to create rename/copy, then this
718 transformation merges them back into the original
719 "modification".</p>
720 </div>
721 <div class="paragraph">
722 <p>The "extent of changes" parameter can be tweaked from the
723 default 80% (that is, unless more than 80% of the original
724 material is deleted, the broken pairs are merged back into a
725 single modification) by giving a second number to -B option,
726 like these:</p>
727 </div>
728 <div class="ulist">
729 <ul>
730 <li>
731 <p>-B50/60 (give 50% "break score" to diffcore-break, use 60%
732 for diffcore-merge-broken).</p>
733 </li>
734 <li>
735 <p>-B/60 (the same as above, since diffcore-break defaults to 50%).</p>
736 </li>
737 </ul>
738 </div>
739 <div class="paragraph">
740 <p>Note that earlier implementation left a broken pair as separate
741 creation and deletion patches. This was an unnecessary hack, and
742 the latest implementation always merges all the broken pairs
743 back into modifications, but the resulting patch output is
744 formatted differently for easier review in case of such
745 a complete rewrite by showing the entire contents of the old version
746 prefixed with <em>-</em>, followed by the entire contents of the new
747 version prefixed with <em>+</em>.</p>
748 </div>
749 </div>
750 </div>
751 <div class="sect1">
752 <h2 id="_diffcore_pickaxe_for_detecting_additiondeletion_of_specified_string">diffcore-pickaxe: For Detecting Addition/Deletion of Specified String</h2>
753 <div class="sectionbody">
754 <div class="paragraph">
755 <p>This transformation limits the set of filepairs to those that change
756 specified strings between the preimage and the postimage in a certain
757 way. -S&lt;block-of-text&gt; and -G&lt;regular-expression&gt; options are used to
758 specify different ways these strings are sought.</p>
759 </div>
760 <div class="paragraph">
761 <p>"-S&lt;block-of-text&gt;" detects filepairs whose preimage and postimage
762 have different number of occurrences of the specified block of text.
763 By definition, it will not detect in-file moves. Also, when a
764 changeset moves a file wholesale without affecting the interesting
765 string, diffcore-rename kicks in as usual, and <code>-S</code> omits the filepair
766 (since the number of occurrences of that string didn&#8217;t change in that
767 rename-detected filepair). When used with <code>--pickaxe-regex</code>, treat
768 the &lt;block-of-text&gt; as an extended POSIX regular expression to match,
769 instead of a literal string.</p>
770 </div>
771 <div class="paragraph">
772 <p>"-G&lt;regular-expression&gt;" (mnemonic: grep) detects filepairs whose
773 textual diff has an added or a deleted line that matches the given
774 regular expression. This means that it will detect in-file (or what
775 rename-detection considers the same file) moves, which is noise. The
776 implementation runs diff twice and greps, and this can be quite
777 expensive. To speed things up, binary files without textconv filters
778 will be ignored.</p>
779 </div>
780 <div class="paragraph">
781 <p>When <code>-S</code> or <code>-G</code> are used without <code>--pickaxe-all</code>, only filepairs
782 that match their respective criterion are kept in the output. When
783 <code>--pickaxe-all</code> is used, if even one filepair matches their respective
784 criterion in a changeset, the entire changeset is kept. This behavior
785 is designed to make reviewing changes in the context of the whole
786 changeset easier.</p>
787 </div>
788 </div>
789 </div>
790 <div class="sect1">
791 <h2 id="_diffcore_order_for_sorting_the_output_based_on_filenames">diffcore-order: For Sorting the Output Based on Filenames</h2>
792 <div class="sectionbody">
793 <div class="paragraph">
794 <p>This is used to reorder the filepairs according to the user&#8217;s
795 (or project&#8217;s) taste, and is controlled by the -O option to the
796 <em>git diff-*</em> commands.</p>
797 </div>
798 <div class="paragraph">
799 <p>This takes a text file each of whose lines is a shell glob
800 pattern. Filepairs that match a glob pattern on an earlier line
801 in the file are output before ones that match a later line, and
802 filepairs that do not match any glob pattern are output last.</p>
803 </div>
804 <div class="paragraph">
805 <p>As an example, a typical orderfile for the core Git probably
806 would look like this:</p>
807 </div>
808 <div class="listingblock">
809 <div class="content">
810 <pre>README
811 Makefile
812 Documentation
815 t</pre>
816 </div>
817 </div>
818 </div>
819 </div>
820 <div class="sect1">
821 <h2 id="_diffcore_rotate_for_changing_at_which_path_output_starts">diffcore-rotate: For Changing At Which Path Output Starts</h2>
822 <div class="sectionbody">
823 <div class="paragraph">
824 <p>This transformation takes one pathname, and rotates the set of
825 filepairs so that the filepair for the given pathname comes first,
826 optionally discarding the paths that come before it. This is used
827 to implement the <code>--skip-to</code> and the <code>--rotate-to</code> options. It is
828 an error when the specified pathname is not in the set of filepairs,
829 but it is not useful to error out when used with "git log" family of
830 commands, because it is unreasonable to expect that a given path
831 would be modified by each and every commit shown by the "git log"
832 command. For this reason, when used with "git log", the filepair
833 that sorts the same as, or the first one that sorts after, the given
834 pathname is where the output starts.</p>
835 </div>
836 <div class="paragraph">
837 <p>Use of this transformation combined with diffcore-order will produce
838 unexpected results, as the input to this transformation is likely
839 not sorted when diffcore-order is in effect.</p>
840 </div>
841 </div>
842 </div>
843 <div class="sect1">
844 <h2 id="_see_also">SEE ALSO</h2>
845 <div class="sectionbody">
846 <div class="paragraph">
847 <p><a href="git-diff.html">git-diff(1)</a>,
848 <a href="git-diff-files.html">git-diff-files(1)</a>,
849 <a href="git-diff-index.html">git-diff-index(1)</a>,
850 <a href="git-diff-tree.html">git-diff-tree(1)</a>,
851 <a href="git-format-patch.html">git-format-patch(1)</a>,
852 <a href="git-log.html">git-log(1)</a>,
853 <a href="gitglossary.html">gitglossary(7)</a>,
854 <a href="user-manual.html">The Git User&#8217;s Manual</a></p>
855 </div>
856 </div>
857 </div>
858 <div class="sect1">
859 <h2 id="_git">GIT</h2>
860 <div class="sectionbody">
861 <div class="paragraph">
862 <p>Part of the <a href="git.html">git(1)</a> suite</p>
863 </div>
864 </div>
865 </div>
866 </div>
867 <div id="footer">
868 <div id="footer-text">
869 Last updated 2024-02-08 15:45:59 -0800
870 </div>
871 </div>
872 </body>
873 </html>