Autogenerated HTML docs for v2.47.0-318-g04eaf
[git-htmldocs.git] / gitformat-index.html
blobef0dc5bca385d85c2077ae626f8bdf54e7793a9a
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>gitformat-index(5)</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>gitformat-index(5) Manual Page</h1>
444 <h2 id="_name">NAME</h2>
445 <div class="sectionbody">
446 <p>gitformat-index - Git index format</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">$GIT_DIR/index</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>Git index format</p>
463 </div>
464 </div>
465 </div>
466 <div class="sect1">
467 <h2 id="_the_git_index_file_has_the_following_format">The Git index file has the following format</h2>
468 <div class="sectionbody">
469 <div class="literalblock">
470 <div class="content">
471 <pre>All binary numbers are in network byte order.
472 In a repository using the traditional SHA-1, checksums and object IDs
473 (object names) mentioned below are all computed using SHA-1. Similarly,
474 in SHA-256 repositories, these values are computed using SHA-256.
475 Version 2 is described here unless stated otherwise.</pre>
476 </div>
477 </div>
478 <div class="ulist">
479 <ul>
480 <li>
481 <p>A 12-byte header consisting of</p>
482 <div class="literalblock">
483 <div class="content">
484 <pre>4-byte signature:
485 The signature is { 'D', 'I', 'R', 'C' } (stands for "dircache")</pre>
486 </div>
487 </div>
488 <div class="literalblock">
489 <div class="content">
490 <pre>4-byte version number:
491 The current supported versions are 2, 3 and 4.</pre>
492 </div>
493 </div>
494 <div class="literalblock">
495 <div class="content">
496 <pre>32-bit number of index entries.</pre>
497 </div>
498 </div>
499 </li>
500 <li>
501 <p>A number of sorted index entries (see below).</p>
502 </li>
503 <li>
504 <p>Extensions</p>
505 <div class="literalblock">
506 <div class="content">
507 <pre>Extensions are identified by signature. Optional extensions can
508 be ignored if Git does not understand them.</pre>
509 </div>
510 </div>
511 <div class="literalblock">
512 <div class="content">
513 <pre>4-byte extension signature. If the first byte is 'A'..'Z' the
514 extension is optional and can be ignored.</pre>
515 </div>
516 </div>
517 <div class="literalblock">
518 <div class="content">
519 <pre>32-bit size of the extension</pre>
520 </div>
521 </div>
522 <div class="literalblock">
523 <div class="content">
524 <pre>Extension data</pre>
525 </div>
526 </div>
527 </li>
528 <li>
529 <p>Hash checksum over the content of the index file before this checksum.</p>
530 </li>
531 </ul>
532 </div>
533 </div>
534 </div>
535 <div class="sect1">
536 <h2 id="_index_entry">Index entry</h2>
537 <div class="sectionbody">
538 <div class="literalblock">
539 <div class="content">
540 <pre>Index entries are sorted in ascending order on the name field,
541 interpreted as a string of unsigned bytes (i.e. memcmp() order, no
542 localization, no special casing of directory separator '/'). Entries
543 with the same name are sorted by their stage field.</pre>
544 </div>
545 </div>
546 <div class="literalblock">
547 <div class="content">
548 <pre>An index entry typically represents a file. However, if sparse-checkout
549 is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the
550 `extensions.sparseIndex` extension is enabled, then the index may
551 contain entries for directories outside of the sparse-checkout definition.
552 These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and
553 the path ends in a directory separator.</pre>
554 </div>
555 </div>
556 <div class="literalblock">
557 <div class="content">
558 <pre>32-bit ctime seconds, the last time a file's metadata changed
559 this is stat(2) data</pre>
560 </div>
561 </div>
562 <div class="literalblock">
563 <div class="content">
564 <pre>32-bit ctime nanosecond fractions
565 this is stat(2) data</pre>
566 </div>
567 </div>
568 <div class="literalblock">
569 <div class="content">
570 <pre>32-bit mtime seconds, the last time a file's data changed
571 this is stat(2) data</pre>
572 </div>
573 </div>
574 <div class="literalblock">
575 <div class="content">
576 <pre>32-bit mtime nanosecond fractions
577 this is stat(2) data</pre>
578 </div>
579 </div>
580 <div class="literalblock">
581 <div class="content">
582 <pre>32-bit dev
583 this is stat(2) data</pre>
584 </div>
585 </div>
586 <div class="literalblock">
587 <div class="content">
588 <pre>32-bit ino
589 this is stat(2) data</pre>
590 </div>
591 </div>
592 <div class="literalblock">
593 <div class="content">
594 <pre>32-bit mode, split into (high to low bits)</pre>
595 </div>
596 </div>
597 <div class="literalblock">
598 <div class="content">
599 <pre>16-bit unused, must be zero</pre>
600 </div>
601 </div>
602 <div class="literalblock">
603 <div class="content">
604 <pre>4-bit object type
605 valid values in binary are 1000 (regular file), 1010 (symbolic link)
606 and 1110 (gitlink)</pre>
607 </div>
608 </div>
609 <div class="literalblock">
610 <div class="content">
611 <pre>3-bit unused, must be zero</pre>
612 </div>
613 </div>
614 <div class="literalblock">
615 <div class="content">
616 <pre>9-bit unix permission. Only 0755 and 0644 are valid for regular files.
617 Symbolic links and gitlinks have value 0 in this field.</pre>
618 </div>
619 </div>
620 <div class="literalblock">
621 <div class="content">
622 <pre>32-bit uid
623 this is stat(2) data</pre>
624 </div>
625 </div>
626 <div class="literalblock">
627 <div class="content">
628 <pre>32-bit gid
629 this is stat(2) data</pre>
630 </div>
631 </div>
632 <div class="literalblock">
633 <div class="content">
634 <pre>32-bit file size
635 This is the on-disk size from stat(2), truncated to 32-bit.</pre>
636 </div>
637 </div>
638 <div class="literalblock">
639 <div class="content">
640 <pre>Object name for the represented object</pre>
641 </div>
642 </div>
643 <div class="literalblock">
644 <div class="content">
645 <pre>A 16-bit 'flags' field split into (high to low bits)</pre>
646 </div>
647 </div>
648 <div class="literalblock">
649 <div class="content">
650 <pre>1-bit assume-valid flag</pre>
651 </div>
652 </div>
653 <div class="literalblock">
654 <div class="content">
655 <pre>1-bit extended flag (must be zero in version 2)</pre>
656 </div>
657 </div>
658 <div class="literalblock">
659 <div class="content">
660 <pre>2-bit stage (during merge)</pre>
661 </div>
662 </div>
663 <div class="literalblock">
664 <div class="content">
665 <pre>12-bit name length if the length is less than 0xFFF; otherwise 0xFFF
666 is stored in this field.</pre>
667 </div>
668 </div>
669 <div class="literalblock">
670 <div class="content">
671 <pre>(Version 3 or later) A 16-bit field, only applicable if the
672 "extended flag" above is 1, split into (high to low bits).</pre>
673 </div>
674 </div>
675 <div class="literalblock">
676 <div class="content">
677 <pre>1-bit reserved for future</pre>
678 </div>
679 </div>
680 <div class="literalblock">
681 <div class="content">
682 <pre>1-bit skip-worktree flag (used by sparse checkout)</pre>
683 </div>
684 </div>
685 <div class="literalblock">
686 <div class="content">
687 <pre>1-bit intent-to-add flag (used by "git add -N")</pre>
688 </div>
689 </div>
690 <div class="literalblock">
691 <div class="content">
692 <pre>13-bit unused, must be zero</pre>
693 </div>
694 </div>
695 <div class="literalblock">
696 <div class="content">
697 <pre>Entry path name (variable length) relative to top level directory
698 (without leading slash). '/' is used as path separator. The special
699 path components ".", ".." and ".git" (without quotes) are disallowed.
700 Trailing slash is also disallowed.</pre>
701 </div>
702 </div>
703 <div class="literalblock">
704 <div class="content">
705 <pre>The exact encoding is undefined, but the '.' and '/' characters
706 are encoded in 7-bit ASCII and the encoding cannot contain a NUL
707 byte (iow, this is a UNIX pathname).</pre>
708 </div>
709 </div>
710 <div class="literalblock">
711 <div class="content">
712 <pre>(Version 4) In version 4, the entry path name is prefix-compressed
713 relative to the path name for the previous entry (the very first
714 entry is encoded as if the path name for the previous entry is an
715 empty string). At the beginning of an entry, an integer N in the
716 variable width encoding (the same encoding as the offset is encoded
717 for OFS_DELTA pack entries; see linkgit:gitformat-pack[5]) is stored, followed
718 by a NUL-terminated string S. Removing N bytes from the end of the
719 path name for the previous entry, and replacing it with the string S
720 yields the path name for this entry.</pre>
721 </div>
722 </div>
723 <div class="literalblock">
724 <div class="content">
725 <pre>1-8 nul bytes as necessary to pad the entry to a multiple of eight bytes
726 while keeping the name NUL-terminated.</pre>
727 </div>
728 </div>
729 <div class="literalblock">
730 <div class="content">
731 <pre>(Version 4) In version 4, the padding after the pathname does not
732 exist.</pre>
733 </div>
734 </div>
735 <div class="literalblock">
736 <div class="content">
737 <pre>Interpretation of index entries in split index mode is completely
738 different. See below for details.</pre>
739 </div>
740 </div>
741 </div>
742 </div>
743 <div class="sect1">
744 <h2 id="_extensions">Extensions</h2>
745 <div class="sectionbody">
746 <div class="sect2">
747 <h3 id="_cache_tree">Cache tree</h3>
748 <div class="literalblock">
749 <div class="content">
750 <pre>Since the index does not record entries for directories, the cache
751 entries cannot describe tree objects that already exist in the object
752 database for regions of the index that are unchanged from an existing
753 commit. The cache tree extension stores a recursive tree structure that
754 describes the trees that already exist and completely match sections of
755 the cache entries. This speeds up tree object generation from the index
756 for a new commit by only computing the trees that are "new" to that
757 commit. It also assists when comparing the index to another tree, such
758 as `HEAD^{tree}`, since sections of the index can be skipped when a tree
759 comparison demonstrates equality.</pre>
760 </div>
761 </div>
762 <div class="literalblock">
763 <div class="content">
764 <pre>The recursive tree structure uses nodes that store a number of cache
765 entries, a list of subnodes, and an object ID (OID). The OID references
766 the existing tree for that node, if it is known to exist. The subnodes
767 correspond to subdirectories that themselves have cache tree nodes. The
768 number of cache entries corresponds to the number of cache entries in
769 the index that describe paths within that tree's directory.</pre>
770 </div>
771 </div>
772 <div class="literalblock">
773 <div class="content">
774 <pre>The extension tracks the full directory structure in the cache tree
775 extension, but this is generally smaller than the full cache entry list.</pre>
776 </div>
777 </div>
778 <div class="literalblock">
779 <div class="content">
780 <pre>When a path is updated in index, Git invalidates all nodes of the
781 recursive cache tree corresponding to the parent directories of that
782 path. We store these tree nodes as being "invalid" by using "-1" as the
783 number of cache entries. Invalid nodes still store a span of index
784 entries, allowing Git to focus its efforts when reconstructing a full
785 cache tree.</pre>
786 </div>
787 </div>
788 <div class="literalblock">
789 <div class="content">
790 <pre>The signature for this extension is { 'T', 'R', 'E', 'E' }.</pre>
791 </div>
792 </div>
793 <div class="literalblock">
794 <div class="content">
795 <pre>A series of entries fill the entire extension; each of which
796 consists of:</pre>
797 </div>
798 </div>
799 <div class="ulist">
800 <ul>
801 <li>
802 <p>NUL-terminated path component (relative to its parent directory);</p>
803 </li>
804 <li>
805 <p>ASCII decimal number of entries in the index that is covered by the
806 tree this entry represents (entry_count);</p>
807 </li>
808 <li>
809 <p>A space (ASCII 32);</p>
810 </li>
811 <li>
812 <p>ASCII decimal number that represents the number of subtrees this
813 tree has;</p>
814 </li>
815 <li>
816 <p>A newline (ASCII 10); and</p>
817 </li>
818 <li>
819 <p>Object name for the object that would result from writing this span
820 of index as a tree.</p>
821 <div class="literalblock">
822 <div class="content">
823 <pre>An entry can be in an invalidated state and is represented by having
824 a negative number in the entry_count field. In this case, there is no
825 object name and the next entry starts immediately after the newline.
826 When writing an invalid entry, -1 should always be used as entry_count.</pre>
827 </div>
828 </div>
829 <div class="literalblock">
830 <div class="content">
831 <pre>The entries are written out in the top-down, depth-first order. The
832 first entry represents the root level of the repository, followed by the
833 first subtree--let's call this A--of the root level (with its name
834 relative to the root level), followed by the first subtree of A (with
835 its name relative to A), and so on. The specified number of subtrees
836 indicates when the current level of the recursive stack is complete.</pre>
837 </div>
838 </div>
839 </li>
840 </ul>
841 </div>
842 </div>
843 <div class="sect2">
844 <h3 id="_resolve_undo">Resolve undo</h3>
845 <div class="literalblock">
846 <div class="content">
847 <pre>A conflict is represented in the index as a set of higher stage entries.
848 When a conflict is resolved (e.g. with "git add path"), these higher
849 stage entries will be removed and a stage-0 entry with proper resolution
850 is added.</pre>
851 </div>
852 </div>
853 <div class="literalblock">
854 <div class="content">
855 <pre>When these higher stage entries are removed, they are saved in the
856 resolve undo extension, so that conflicts can be recreated (e.g. with
857 "git checkout -m"), in case users want to redo a conflict resolution
858 from scratch.</pre>
859 </div>
860 </div>
861 <div class="literalblock">
862 <div class="content">
863 <pre>The signature for this extension is { 'R', 'E', 'U', 'C' }.</pre>
864 </div>
865 </div>
866 <div class="literalblock">
867 <div class="content">
868 <pre>A series of entries fill the entire extension; each of which
869 consists of:</pre>
870 </div>
871 </div>
872 <div class="ulist">
873 <ul>
874 <li>
875 <p>NUL-terminated pathname the entry describes (relative to the root of
876 the repository, i.e. full pathname);</p>
877 </li>
878 <li>
879 <p>Three NUL-terminated ASCII octal numbers, entry mode of entries in
880 stage 1 to 3 (a missing stage is represented by "0" in this field);
881 and</p>
882 </li>
883 <li>
884 <p>At most three object names of the entry in stages from 1 to 3
885 (nothing is written for a missing stage).</p>
886 </li>
887 </ul>
888 </div>
889 </div>
890 <div class="sect2">
891 <h3 id="_split_index">Split index</h3>
892 <div class="literalblock">
893 <div class="content">
894 <pre>In split index mode, the majority of index entries could be stored
895 in a separate file. This extension records the changes to be made on
896 top of that to produce the final index.</pre>
897 </div>
898 </div>
899 <div class="literalblock">
900 <div class="content">
901 <pre>The signature for this extension is { 'l', 'i', 'n', 'k' }.</pre>
902 </div>
903 </div>
904 <div class="literalblock">
905 <div class="content">
906 <pre>The extension consists of:</pre>
907 </div>
908 </div>
909 <div class="ulist">
910 <ul>
911 <li>
912 <p>Hash of the shared index file. The shared index file path
913 is $GIT_DIR/sharedindex.&lt;hash&gt;. If all bits are zero, the
914 index does not require a shared index file.</p>
915 </li>
916 <li>
917 <p>An ewah-encoded delete bitmap, each bit represents an entry in the
918 shared index. If a bit is set, its corresponding entry in the
919 shared index will be removed from the final index. Note, because
920 a delete operation changes index entry positions, but we do need
921 original positions in replace phase, it&#8217;s best to just mark
922 entries for removal, then do a mass deletion after replacement.</p>
923 </li>
924 <li>
925 <p>An ewah-encoded replace bitmap, each bit represents an entry in
926 the shared index. If a bit is set, its corresponding entry in the
927 shared index will be replaced with an entry in this index
928 file. All replaced entries are stored in sorted order in this
929 index. The first "1" bit in the replace bitmap corresponds to the
930 first index entry, the second "1" bit to the second entry and so
931 on. Replaced entries may have empty path names to save space.</p>
932 <div class="literalblock">
933 <div class="content">
934 <pre>The remaining index entries after replaced ones will be added to the
935 final index. These added entries are also sorted by entry name then
936 stage.</pre>
937 </div>
938 </div>
939 </li>
940 </ul>
941 </div>
942 </div>
943 </div>
944 </div>
945 <div class="sect1">
946 <h2 id="_untracked_cache">Untracked cache</h2>
947 <div class="sectionbody">
948 <div class="literalblock">
949 <div class="content">
950 <pre>Untracked cache saves the untracked file list and necessary data to
951 verify the cache. The signature for this extension is { 'U', 'N',
952 'T', 'R' }.</pre>
953 </div>
954 </div>
955 <div class="literalblock">
956 <div class="content">
957 <pre>The extension starts with</pre>
958 </div>
959 </div>
960 <div class="ulist">
961 <ul>
962 <li>
963 <p>A sequence of NUL-terminated strings, preceded by the size of the
964 sequence in variable width encoding. Each string describes the
965 environment where the cache can be used.</p>
966 </li>
967 <li>
968 <p>Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
969 ctime field until "file size".</p>
970 </li>
971 <li>
972 <p>Stat data of core.excludesFile</p>
973 </li>
974 <li>
975 <p>32-bit dir_flags (see struct dir_struct)</p>
976 </li>
977 <li>
978 <p>Hash of $GIT_DIR/info/exclude. A null hash means the file
979 does not exist.</p>
980 </li>
981 <li>
982 <p>Hash of core.excludesFile. A null hash means the file does
983 not exist.</p>
984 </li>
985 <li>
986 <p>NUL-terminated string of per-dir exclude file name. This usually
987 is ".gitignore".</p>
988 </li>
989 <li>
990 <p>The number of following directory blocks, variable width
991 encoding. If this number is zero, the extension ends here with a
992 following NUL.</p>
993 </li>
994 <li>
995 <p>A number of directory blocks in depth-first-search order, each
996 consists of</p>
997 </li>
998 <li>
999 <p>The number of untracked entries, variable width encoding.</p>
1000 </li>
1001 <li>
1002 <p>The number of sub-directory blocks, variable width encoding.</p>
1003 </li>
1004 <li>
1005 <p>The directory name terminated by NUL.</p>
1006 </li>
1007 <li>
1008 <p>A number of untracked file/dir names terminated by NUL.</p>
1009 </li>
1010 </ul>
1011 </div>
1012 <div class="paragraph">
1013 <p>The remaining data of each directory block is grouped by type:</p>
1014 </div>
1015 <div class="ulist">
1016 <ul>
1017 <li>
1018 <p>An ewah bitmap, the n-th bit marks whether the n-th directory has
1019 valid untracked cache entries.</p>
1020 </li>
1021 <li>
1022 <p>An ewah bitmap, the n-th bit records "check-only" bit of
1023 read_directory_recursive() for the n-th directory.</p>
1024 </li>
1025 <li>
1026 <p>An ewah bitmap, the n-th bit indicates whether hash and stat data
1027 is valid for the n-th directory and exists in the next data.</p>
1028 </li>
1029 <li>
1030 <p>An array of stat data. The n-th data corresponds with the n-th
1031 "one" bit in the previous ewah bitmap.</p>
1032 </li>
1033 <li>
1034 <p>An array of hashes. The n-th hash corresponds with the n-th "one" bit
1035 in the previous ewah bitmap.</p>
1036 </li>
1037 <li>
1038 <p>One NUL.</p>
1039 </li>
1040 </ul>
1041 </div>
1042 </div>
1043 </div>
1044 <div class="sect1">
1045 <h2 id="_file_system_monitor_cache">File System Monitor cache</h2>
1046 <div class="sectionbody">
1047 <div class="literalblock">
1048 <div class="content">
1049 <pre>The file system monitor cache tracks files for which the core.fsmonitor
1050 hook has told us about changes. The signature for this extension is
1051 { 'F', 'S', 'M', 'N' }.</pre>
1052 </div>
1053 </div>
1054 <div class="literalblock">
1055 <div class="content">
1056 <pre>The extension starts with</pre>
1057 </div>
1058 </div>
1059 <div class="ulist">
1060 <ul>
1061 <li>
1062 <p>32-bit version number: the current supported versions are 1 and 2.</p>
1063 </li>
1064 <li>
1065 <p>(Version 1)
1066 64-bit time: the extension data reflects all changes through the given
1067 time which is stored as the nanoseconds elapsed since midnight,
1068 January 1, 1970.</p>
1069 </li>
1070 <li>
1071 <p>(Version 2)
1072 A null terminated string: an opaque token defined by the file system
1073 monitor application. The extension data reflects all changes relative
1074 to that token.</p>
1075 </li>
1076 <li>
1077 <p>32-bit bitmap size: the size of the CE_FSMONITOR_VALID bitmap.</p>
1078 </li>
1079 <li>
1080 <p>An ewah bitmap, the n-th bit indicates whether the n-th index entry
1081 is not CE_FSMONITOR_VALID.</p>
1082 </li>
1083 </ul>
1084 </div>
1085 </div>
1086 </div>
1087 <div class="sect1">
1088 <h2 id="_end_of_index_entry">End of Index Entry</h2>
1089 <div class="sectionbody">
1090 <div class="literalblock">
1091 <div class="content">
1092 <pre>The End of Index Entry (EOIE) is used to locate the end of the variable
1093 length index entries and the beginning of the extensions. Code can take
1094 advantage of this to quickly locate the index extensions without having
1095 to parse through all of the index entries.</pre>
1096 </div>
1097 </div>
1098 <div class="literalblock">
1099 <div class="content">
1100 <pre>Because it must be able to be loaded before the variable length cache
1101 entries and other index extensions, this extension must be written last.
1102 The signature for this extension is { 'E', 'O', 'I', 'E' }.</pre>
1103 </div>
1104 </div>
1105 <div class="literalblock">
1106 <div class="content">
1107 <pre>The extension consists of:</pre>
1108 </div>
1109 </div>
1110 <div class="ulist">
1111 <ul>
1112 <li>
1113 <p>32-bit offset to the end of the index entries</p>
1114 </li>
1115 <li>
1116 <p>Hash over the extension types and their sizes (but not
1117 their contents). E.g. if we have "TREE" extension that is N-bytes
1118 long, "REUC" extension that is M-bytes long, followed by "EOIE",
1119 then the hash would be:</p>
1120 <div class="literalblock">
1121 <div class="content">
1122 <pre>Hash("TREE" + &lt;binary-representation-of-N&gt; +
1123 "REUC" + &lt;binary-representation-of-M&gt;)</pre>
1124 </div>
1125 </div>
1126 </li>
1127 </ul>
1128 </div>
1129 </div>
1130 </div>
1131 <div class="sect1">
1132 <h2 id="_index_entry_offset_table">Index Entry Offset Table</h2>
1133 <div class="sectionbody">
1134 <div class="literalblock">
1135 <div class="content">
1136 <pre>The Index Entry Offset Table (IEOT) is used to help address the CPU
1137 cost of loading the index by enabling multi-threading the process of
1138 converting cache entries from the on-disk format to the in-memory format.
1139 The signature for this extension is { 'I', 'E', 'O', 'T' }.</pre>
1140 </div>
1141 </div>
1142 <div class="literalblock">
1143 <div class="content">
1144 <pre>The extension consists of:</pre>
1145 </div>
1146 </div>
1147 <div class="ulist">
1148 <ul>
1149 <li>
1150 <p>32-bit version (currently 1)</p>
1151 </li>
1152 <li>
1153 <p>A number of index offset entries each consisting of:</p>
1154 </li>
1155 <li>
1156 <p>32-bit offset from the beginning of the file to the first cache entry
1157 in this block of entries.</p>
1158 </li>
1159 <li>
1160 <p>32-bit count of cache entries in this block</p>
1161 </li>
1162 </ul>
1163 </div>
1164 </div>
1165 </div>
1166 <div class="sect1">
1167 <h2 id="_sparse_directory_entries">Sparse Directory Entries</h2>
1168 <div class="sectionbody">
1169 <div class="literalblock">
1170 <div class="content">
1171 <pre>When using sparse-checkout in cone mode, some entire directories within
1172 the index can be summarized by pointing to a tree object instead of the
1173 entire expanded list of paths within that tree. An index containing such
1174 entries is a "sparse index". Index format versions 4 and less were not
1175 implemented with such entries in mind. Thus, for these versions, an
1176 index containing sparse directory entries will include this extension
1177 with signature { 's', 'd', 'i', 'r' }. Like the split-index extension,
1178 tools should avoid interacting with a sparse index unless they understand
1179 this extension.</pre>
1180 </div>
1181 </div>
1182 </div>
1183 </div>
1184 <div class="sect1">
1185 <h2 id="_git">GIT</h2>
1186 <div class="sectionbody">
1187 <div class="paragraph">
1188 <p>Part of the <a href="git.html">git(1)</a> suite</p>
1189 </div>
1190 </div>
1191 </div>
1192 </div>
1193 <div id="footer">
1194 <div id="footer-text">
1195 Last updated 2024-02-08 15:45:59 -0800
1196 </div>
1197 </div>
1198 </body>
1199 </html>