blob: 90add2d157b9ecd64c7f858bc021a3648eb660c4 [file] [log] [blame]
Junio C Hamanob96f40a2024-08-01 00:57:251<!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"/>
Junio C Hamanod6a33e42025-02-18 23:45:117<meta name="generator" content="Asciidoctor 2.0.23"/>
Junio C Hamanob96f40a2024-08-01 00:57:258<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"; */
14html{font-family:sans-serif;-webkit-text-size-adjust:100%}
15a{background:none}
16a:focus{outline:thin dotted}
17a:active,a:hover{outline:0}
18h1{font-size:2em;margin:.67em 0}
19b,strong{font-weight:bold}
20abbr{font-size:.9em}
21abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
22dfn{font-style:italic}
23hr{height:0}
24mark{background:#ff0;color:#000}
25code,kbd,pre,samp{font-family:monospace;font-size:1em}
26pre{white-space:pre-wrap}
27q{quotes:"\201C" "\201D" "\2018" "\2019"}
28small{font-size:80%}
29sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
30sup{top:-.5em}
31sub{bottom:-.25em}
32img{border:0}
33svg:not(:root){overflow:hidden}
34figure{margin:0}
35audio,video{display:inline-block}
36audio:not([controls]){display:none;height:0}
37fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
38legend{border:0;padding:0}
39button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
40button,input{line-height:normal}
41button,select{text-transform:none}
42button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
43button[disabled],html input[disabled]{cursor:default}
44input[type=checkbox],input[type=radio]{padding:0}
45button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
46textarea{overflow:auto;vertical-align:top}
47table{border-collapse:collapse;border-spacing:0}
48*,::before,::after{box-sizing:border-box}
49html,body{font-size:100%}
50body{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}
51a:hover{cursor:pointer}
52img,object,embed{max-width:100%;height:auto}
53object,embed{height:100%}
54img{-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}
62img,object,svg{display:inline-block;vertical-align:middle}
63textarea{height:auto;min-height:50px}
64select{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}
66div,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}
67a{color:#2156a5;text-decoration:underline;line-height:inherit}
68a:hover,a:focus{color:#1d4b8f}
69a img{border:0}
70p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
71p aside{font-size:.875em;line-height:1.35;font-style:italic}
72h1,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}
73h1 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}
74h1{font-size:2.125em}
75h2{font-size:1.6875em}
76h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
77h4,h5{font-size:1.125em}
78h6{font-size:1em}
79hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
80em,i{font-style:italic;line-height:inherit}
81strong,b{font-weight:bold;line-height:inherit}
82small{font-size:60%;line-height:inherit}
83code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
84ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
85ul,ol{margin-left:1.5em}
86ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
87ul.circle{list-style-type:circle}
88ul.disc{list-style-type:disc}
89ul.square{list-style-type:square}
90ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
91ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
92dl dt{margin-bottom:.3125em;font-weight:bold}
93dl dd{margin-bottom:1.25em}
94blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
95blockquote,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}
97h1{font-size:2.75em}
98h2{font-size:2.3125em}
99h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
100h4{font-size:1.4375em}}
101table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
102table thead,table tfoot{background:#f7f8f7}
103table 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}
104table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
105table tr.even,table tr.alt{background:#f8f8f7}
106table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
107h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
108h1 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}
117pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
118pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
119pre>code{display:block}
120pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
121em em{font-style:normal}
122strong strong{font-weight:400}
123.keyseq{color:rgba(51,51,51,.8)}
124kbd{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}
132b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
133b.button::before{content:"[";padding:0 3px 0 2px}
134b.button::after{content:"]";padding:0 2px 0 3px}
135p 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}
Junio C Hamanod6a33e42025-02-18 23:45:11143#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
Junio C Hamanob96f40a2024-08-01 00:57:25144#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}
164body.toc2{padding-left:15em;padding-right:0}
Junio C Hamanod6a33e42025-02-18 23:45:11165body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
Junio C Hamanob96f40a2024-08-01 00:57:25166#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}
167#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
168#toc.toc2>ul{font-size:.9em;margin-bottom:0}
169#toc.toc2 ul ul{margin-left:0;padding-left:1em}
170#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
171body.toc2.toc-right{padding-left:0;padding-right:15em}
172body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
173@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
174#toc.toc2{width:20em}
175#toc.toc2 #toctitle{font-size:1.375em}
176#toc.toc2>ul{font-size:.95em}
177#toc.toc2 ul ul{padding-left:1.25em}
178body.toc2.toc-right{padding-left:0;padding-right:20em}}
179#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
180#content #toc>:first-child{margin-top:0}
181#content #toc>:last-child{margin-bottom:0}
182#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
183#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
184#content{margin-bottom:.625em}
185.sect1{padding-bottom:.625em}
186@media screen and (min-width:768px){#content{margin-bottom:1.25em}
187.sect1{padding-bottom:1.25em}}
188.sect1:last-child{padding-bottom:0}
189.sect1+.sect1{border-top:1px solid #e7e7e9}
190#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}
191#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}
192#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}
193#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}
194#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}
195details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
196details{margin-left:1.25rem}
197details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
198details>summary::-webkit-details-marker{display:none}
199details>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%)}
200details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
201details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
202.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}
203table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
204.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)}
205.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
206.admonitionblock>table td.icon{text-align:center;width:80px}
207.admonitionblock>table td.icon img{max-width:none}
208.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
209.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}
210.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
211.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
212.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
213.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
214.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
215.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}
216.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
217@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
218@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
219.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
220.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
221.listingblock>.content{position:relative}
222.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}
223.listingblock:hover code[data-lang]::before{display:block}
224.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
225.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
226.listingblock pre.highlightjs{padding:0}
227.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
228.listingblock pre.prettyprint{border-width:0}
229.prettyprint{background:#f7f7f8}
230pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
231pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
232pre.prettyprint li code[data-lang]::before{opacity:1}
233pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
234table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
235table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
236table.linenotable td.code{padding-left:.75em}
237table.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}
238pre.pygments span.linenos{display:inline-block;margin-right:.75em}
239.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
240.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
241.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}
242.quoteblock blockquote{margin:0;padding:0;border:0}
243.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)}
244.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
245.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
246.verseblock{margin:0 1em 1.25em}
247.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}
248.verseblock pre strong{font-weight:400}
249.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
250.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
251.quoteblock .attribution br,.verseblock .attribution br{display:none}
252.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
253.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
254.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}
255.quoteblock.abstract{margin:0 1em 1.25em;display:block}
256.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
257.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
258.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
259.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
260.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
261p.tableblock:last-child{margin-bottom:0}
262td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
263td.tableblock>.content>:last-child{margin-bottom:-1.25em}
264table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
265table.grid-all>*>tr>*{border-width:1px}
266table.grid-cols>*>tr>*{border-width:0 1px}
267table.grid-rows>*>tr>*{border-width:1px 0}
268table.frame-all{border-width:1px}
269table.frame-ends{border-width:1px 0}
270table.frame-sides{border-width:0 1px}
271table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
272table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
273table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
274table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
275table.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}
276th.halign-left,td.halign-left{text-align:left}
277th.halign-right,td.halign-right{text-align:right}
278th.halign-center,td.halign-center{text-align:center}
279th.valign-top,td.valign-top{vertical-align:top}
280th.valign-bottom,td.valign-bottom{vertical-align:bottom}
281th.valign-middle,td.valign-middle{vertical-align:middle}
282table thead th,table tfoot th{font-weight:bold}
283tbody tr th{background:#f7f8f7}
284tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
285p.tableblock>code:only-child{background:none;padding:0}
286p.tableblock{font-size:1em}
287ol{margin-left:1.75em}
288ul li ol{margin-left:1.5em}
289dl dd{margin-left:1.125em}
290dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
291li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
292ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
293ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
294ul.unstyled,ol.unstyled{margin-left:0}
295li>p:empty:only-child::before{content:"";display:inline-block}
296ul.checklist>li>p:first-child{margin-left:-1em}
297ul.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}
298ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
299ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
300ul.inline>li{margin-left:1.25em}
301.unstyled dl dt{font-weight:400;font-style:normal}
302ol.arabic{list-style-type:decimal}
303ol.decimal{list-style-type:decimal-leading-zero}
304ol.loweralpha{list-style-type:lower-alpha}
305ol.upperalpha{list-style-type:upper-alpha}
306ol.lowerroman{list-style-type:lower-roman}
307ol.upperroman{list-style-type:upper-roman}
308ol.lowergreek{list-style-type:lower-greek}
309.hdlist>table,.colist>table{border:0;background:none}
310.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
311td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
312td.hdlist1{font-weight:bold;padding-bottom:1.25em}
313td.hdlist2{word-wrap:anywhere}
314.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
315.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
316.colist td:not([class]):first-child img{max-width:none}
317.colist td:not([class]):last-child{padding:.25em 0}
318.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
319.imageblock.left{margin:.25em .625em 1.25em 0}
320.imageblock.right{margin:.25em 0 1.25em .625em}
321.imageblock>.title{margin-bottom:0}
322.imageblock.thumb,.imageblock.th{border-width:6px}
323.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
324.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
325.image.left{margin-right:.625em}
326.image.right{margin-left:.625em}
327a.image{text-decoration:none;display:inline-block}
328a.image object{pointer-events:none}
329sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
330sup.footnote a,sup.footnoteref a{text-decoration:none}
Junio C Hamanod6a33e42025-02-18 23:45:11331sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
Junio C Hamanob96f40a2024-08-01 00:57:25332#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
333#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
334#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
335#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
336#footnotes .footnote:last-of-type{margin-bottom:0}
337#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
338div.unbreakable{page-break-inside:avoid}
339.big{font-size:larger}
340.small{font-size:smaller}
341.underline{text-decoration:underline}
342.overline{text-decoration:overline}
343.line-through{text-decoration:line-through}
344.aqua{color:#00bfbf}
345.aqua-background{background:#00fafa}
346.black{color:#000}
347.black-background{background:#000}
348.blue{color:#0000bf}
349.blue-background{background:#0000fa}
350.fuchsia{color:#bf00bf}
351.fuchsia-background{background:#fa00fa}
352.gray{color:#606060}
353.gray-background{background:#7d7d7d}
354.green{color:#006000}
355.green-background{background:#007d00}
356.lime{color:#00bf00}
357.lime-background{background:#00fa00}
358.maroon{color:#600000}
359.maroon-background{background:#7d0000}
360.navy{color:#000060}
361.navy-background{background:#00007d}
362.olive{color:#606000}
363.olive-background{background:#7d7d00}
364.purple{color:#600060}
365.purple-background{background:#7d007d}
366.red{color:#bf0000}
367.red-background{background:#fa0000}
368.silver{color:#909090}
369.silver-background{background:#bcbcbc}
370.teal{color:#006060}
371.teal-background{background:#007d7d}
372.white{color:#bfbfbf}
373.white-background{background:#fafafa}
374.yellow{color:#bfbf00}
375.yellow-background{background:#fafa00}
376span.icon>.fa{cursor:default}
377a span.icon>.fa{cursor:inherit}
378.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
379.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
380.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
381.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
382.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
383.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
384.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}
385.conum[data-value] *{color:#fff!important}
386.conum[data-value]+b{display:none}
387.conum[data-value]::after{content:attr(data-value)}
388pre .conum[data-value]{position:relative;top:-.125em}
389b.conum *{color:inherit!important}
390.conum:not([data-value]):empty{display:none}
391dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
392h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
393p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
394p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
395p{margin-bottom:1.25rem}
396.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
397.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
398.print-only{display:none!important}
399@page{margin:1.25cm .75cm}
400@media print{*{box-shadow:none!important;text-shadow:none!important}
401html{font-size:80%}
402a{color:inherit!important;text-decoration:underline!important}
403a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
404a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
405abbr[title]{border-bottom:1px dotted}
406abbr[title]::after{content:" (" attr(title) ")"}
407pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
408thead{display:table-header-group}
409svg{max-width:100%}
410p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
411h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
412#header,#content,#footnotes,#footer{max-width:none}
413#toc,.sidebarblock,.exampleblock>.content{background:none!important}
414#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
415body.book #header{text-align:center}
416body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
417body.book #header .details{border:0!important;display:block;padding:0!important}
418body.book #header .details span:first-child{margin-left:0!important}
419body.book #header .details br{display:block}
420body.book #header .details br+span::before{content:none!important}
421body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
422body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
423.listingblock code[data-lang]::before{display:block}
424#footer{padding:0 .9375em}
425.hide-on-print{display:none!important}
426.print-only{display:block!important}
427.hide-for-print{display:none!important}
428.show-for-print{display:inherit!important}}
429@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
430.sect1{padding:0!important}
431.sect1+.sect1{border:0}
432#footer{background:none}
433#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
434@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
435</style>
436<style>
437pre>code {
438 display: inline;
439}
440</style>
441</head>
442<body class="manpage">
443<div id="header">
444<h1>gitformat-index(5) Manual Page</h1>
445<h2 id="_name">NAME</h2>
446<div class="sectionbody">
447<p>gitformat-index - Git index format</p>
448</div>
449</div>
450<div id="content">
451<div class="sect1">
452<h2 id="_synopsis">SYNOPSIS</h2>
453<div class="sectionbody">
454<div class="verseblock">
455<pre class="content">$GIT_DIR/index</pre>
456</div>
457</div>
458</div>
459<div class="sect1">
460<h2 id="_description">DESCRIPTION</h2>
461<div class="sectionbody">
462<div class="paragraph">
463<p>Git index format</p>
464</div>
465</div>
466</div>
467<div class="sect1">
468<h2 id="_the_git_index_file_has_the_following_format">The Git index file has the following format</h2>
469<div class="sectionbody">
470<div class="literalblock">
471<div class="content">
472<pre>All binary numbers are in network byte order.
473In a repository using the traditional SHA-1, checksums and object IDs
474(object names) mentioned below are all computed using SHA-1. Similarly,
475in SHA-256 repositories, these values are computed using SHA-256.
476Version 2 is described here unless stated otherwise.</pre>
477</div>
478</div>
479<div class="ulist">
480<ul>
481<li>
482<p>A 12-byte header consisting of</p>
483<div class="literalblock">
484<div class="content">
485<pre>4-byte signature:
486 The signature is { 'D', 'I', 'R', 'C' } (stands for "dircache")</pre>
487</div>
488</div>
489<div class="literalblock">
490<div class="content">
491<pre>4-byte version number:
492 The current supported versions are 2, 3 and 4.</pre>
493</div>
494</div>
495<div class="literalblock">
496<div class="content">
497<pre>32-bit number of index entries.</pre>
498</div>
499</div>
500</li>
501<li>
502<p>A number of sorted index entries (see below).</p>
503</li>
504<li>
505<p>Extensions</p>
506<div class="literalblock">
507<div class="content">
508<pre>Extensions are identified by signature. Optional extensions can
509be ignored if Git does not understand them.</pre>
510</div>
511</div>
512<div class="literalblock">
513<div class="content">
514<pre>4-byte extension signature. If the first byte is 'A'..'Z' the
515extension is optional and can be ignored.</pre>
516</div>
517</div>
518<div class="literalblock">
519<div class="content">
520<pre>32-bit size of the extension</pre>
521</div>
522</div>
523<div class="literalblock">
524<div class="content">
525<pre>Extension data</pre>
526</div>
527</div>
528</li>
529<li>
530<p>Hash checksum over the content of the index file before this checksum.</p>
531</li>
532</ul>
533</div>
534</div>
535</div>
536<div class="sect1">
537<h2 id="_index_entry">Index entry</h2>
538<div class="sectionbody">
539<div class="literalblock">
540<div class="content">
541<pre>Index entries are sorted in ascending order on the name field,
542interpreted as a string of unsigned bytes (i.e. memcmp() order, no
543localization, no special casing of directory separator '/'). Entries
544with the same name are sorted by their stage field.</pre>
545</div>
546</div>
547<div class="literalblock">
548<div class="content">
549<pre>An index entry typically represents a file. However, if sparse-checkout
550is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the
551`extensions.sparseIndex` extension is enabled, then the index may
552contain entries for directories outside of the sparse-checkout definition.
553These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and
554the path ends in a directory separator.</pre>
555</div>
556</div>
557<div class="literalblock">
558<div class="content">
559<pre>32-bit ctime seconds, the last time a file's metadata changed
560 this is stat(2) data</pre>
561</div>
562</div>
563<div class="literalblock">
564<div class="content">
565<pre>32-bit ctime nanosecond fractions
566 this is stat(2) data</pre>
567</div>
568</div>
569<div class="literalblock">
570<div class="content">
571<pre>32-bit mtime seconds, the last time a file's data changed
572 this is stat(2) data</pre>
573</div>
574</div>
575<div class="literalblock">
576<div class="content">
577<pre>32-bit mtime nanosecond fractions
578 this is stat(2) data</pre>
579</div>
580</div>
581<div class="literalblock">
582<div class="content">
583<pre>32-bit dev
584 this is stat(2) data</pre>
585</div>
586</div>
587<div class="literalblock">
588<div class="content">
589<pre>32-bit ino
590 this is stat(2) data</pre>
591</div>
592</div>
593<div class="literalblock">
594<div class="content">
595<pre>32-bit mode, split into (high to low bits)</pre>
596</div>
597</div>
598<div class="literalblock">
599<div class="content">
600<pre>16-bit unused, must be zero</pre>
601</div>
602</div>
603<div class="literalblock">
604<div class="content">
605<pre>4-bit object type
606 valid values in binary are 1000 (regular file), 1010 (symbolic link)
607 and 1110 (gitlink)</pre>
608</div>
609</div>
610<div class="literalblock">
611<div class="content">
612<pre>3-bit unused, must be zero</pre>
613</div>
614</div>
615<div class="literalblock">
616<div class="content">
617<pre>9-bit unix permission. Only 0755 and 0644 are valid for regular files.
618Symbolic links and gitlinks have value 0 in this field.</pre>
619</div>
620</div>
621<div class="literalblock">
622<div class="content">
623<pre>32-bit uid
624 this is stat(2) data</pre>
625</div>
626</div>
627<div class="literalblock">
628<div class="content">
629<pre>32-bit gid
630 this is stat(2) data</pre>
631</div>
632</div>
633<div class="literalblock">
634<div class="content">
635<pre>32-bit file size
636 This is the on-disk size from stat(2), truncated to 32-bit.</pre>
637</div>
638</div>
639<div class="literalblock">
640<div class="content">
641<pre>Object name for the represented object</pre>
642</div>
643</div>
644<div class="literalblock">
645<div class="content">
646<pre>A 16-bit 'flags' field split into (high to low bits)</pre>
647</div>
648</div>
649<div class="literalblock">
650<div class="content">
651<pre>1-bit assume-valid flag</pre>
652</div>
653</div>
654<div class="literalblock">
655<div class="content">
656<pre>1-bit extended flag (must be zero in version 2)</pre>
657</div>
658</div>
659<div class="literalblock">
660<div class="content">
661<pre>2-bit stage (during merge)</pre>
662</div>
663</div>
664<div class="literalblock">
665<div class="content">
666<pre>12-bit name length if the length is less than 0xFFF; otherwise 0xFFF
667is stored in this field.</pre>
668</div>
669</div>
670<div class="literalblock">
671<div class="content">
672<pre>(Version 3 or later) A 16-bit field, only applicable if the
673"extended flag" above is 1, split into (high to low bits).</pre>
674</div>
675</div>
676<div class="literalblock">
677<div class="content">
678<pre>1-bit reserved for future</pre>
679</div>
680</div>
681<div class="literalblock">
682<div class="content">
683<pre>1-bit skip-worktree flag (used by sparse checkout)</pre>
684</div>
685</div>
686<div class="literalblock">
687<div class="content">
688<pre>1-bit intent-to-add flag (used by "git add -N")</pre>
689</div>
690</div>
691<div class="literalblock">
692<div class="content">
693<pre>13-bit unused, must be zero</pre>
694</div>
695</div>
696<div class="literalblock">
697<div class="content">
698<pre>Entry path name (variable length) relative to top level directory
699 (without leading slash). '/' is used as path separator. The special
700 path components ".", ".." and ".git" (without quotes) are disallowed.
701 Trailing slash is also disallowed.</pre>
702</div>
703</div>
704<div class="literalblock">
705<div class="content">
706<pre>The exact encoding is undefined, but the '.' and '/' characters
707are encoded in 7-bit ASCII and the encoding cannot contain a NUL
708byte (iow, this is a UNIX pathname).</pre>
709</div>
710</div>
711<div class="literalblock">
712<div class="content">
713<pre>(Version 4) In version 4, the entry path name is prefix-compressed
714 relative to the path name for the previous entry (the very first
715 entry is encoded as if the path name for the previous entry is an
716 empty string). At the beginning of an entry, an integer N in the
717 variable width encoding (the same encoding as the offset is encoded
718 for OFS_DELTA pack entries; see linkgit:gitformat-pack[5]) is stored, followed
719 by a NUL-terminated string S. Removing N bytes from the end of the
720 path name for the previous entry, and replacing it with the string S
721 yields the path name for this entry.</pre>
722</div>
723</div>
724<div class="literalblock">
725<div class="content">
726<pre>1-8 nul bytes as necessary to pad the entry to a multiple of eight bytes
727while keeping the name NUL-terminated.</pre>
728</div>
729</div>
730<div class="literalblock">
731<div class="content">
732<pre>(Version 4) In version 4, the padding after the pathname does not
733exist.</pre>
734</div>
735</div>
736<div class="literalblock">
737<div class="content">
738<pre>Interpretation of index entries in split index mode is completely
739different. See below for details.</pre>
740</div>
741</div>
742</div>
743</div>
744<div class="sect1">
745<h2 id="_extensions">Extensions</h2>
746<div class="sectionbody">
747<div class="sect2">
748<h3 id="_cache_tree">Cache tree</h3>
749<div class="literalblock">
750<div class="content">
751<pre>Since the index does not record entries for directories, the cache
752entries cannot describe tree objects that already exist in the object
753database for regions of the index that are unchanged from an existing
754commit. The cache tree extension stores a recursive tree structure that
755describes the trees that already exist and completely match sections of
756the cache entries. This speeds up tree object generation from the index
757for a new commit by only computing the trees that are "new" to that
758commit. It also assists when comparing the index to another tree, such
759as `HEAD^{tree}`, since sections of the index can be skipped when a tree
760comparison demonstrates equality.</pre>
761</div>
762</div>
763<div class="literalblock">
764<div class="content">
765<pre>The recursive tree structure uses nodes that store a number of cache
766entries, a list of subnodes, and an object ID (OID). The OID references
767the existing tree for that node, if it is known to exist. The subnodes
768correspond to subdirectories that themselves have cache tree nodes. The
769number of cache entries corresponds to the number of cache entries in
770the index that describe paths within that tree's directory.</pre>
771</div>
772</div>
773<div class="literalblock">
774<div class="content">
775<pre>The extension tracks the full directory structure in the cache tree
776extension, but this is generally smaller than the full cache entry list.</pre>
777</div>
778</div>
779<div class="literalblock">
780<div class="content">
781<pre>When a path is updated in index, Git invalidates all nodes of the
782recursive cache tree corresponding to the parent directories of that
783path. We store these tree nodes as being "invalid" by using "-1" as the
784number of cache entries. Invalid nodes still store a span of index
785entries, allowing Git to focus its efforts when reconstructing a full
786cache tree.</pre>
787</div>
788</div>
789<div class="literalblock">
790<div class="content">
791<pre>The signature for this extension is { 'T', 'R', 'E', 'E' }.</pre>
792</div>
793</div>
794<div class="literalblock">
795<div class="content">
796<pre>A series of entries fill the entire extension; each of which
797consists of:</pre>
798</div>
799</div>
800<div class="ulist">
801<ul>
802<li>
803<p>NUL-terminated path component (relative to its parent directory);</p>
804</li>
805<li>
806<p>ASCII decimal number of entries in the index that is covered by the
807tree this entry represents (entry_count);</p>
808</li>
809<li>
810<p>A space (ASCII 32);</p>
811</li>
812<li>
813<p>ASCII decimal number that represents the number of subtrees this
814tree has;</p>
815</li>
816<li>
817<p>A newline (ASCII 10); and</p>
818</li>
819<li>
820<p>Object name for the object that would result from writing this span
821of index as a tree.</p>
822<div class="literalblock">
823<div class="content">
824<pre>An entry can be in an invalidated state and is represented by having
825a negative number in the entry_count field. In this case, there is no
826object name and the next entry starts immediately after the newline.
827When writing an invalid entry, -1 should always be used as entry_count.</pre>
828</div>
829</div>
830<div class="literalblock">
831<div class="content">
832<pre>The entries are written out in the top-down, depth-first order. The
833first entry represents the root level of the repository, followed by the
834first subtree--let's call this A--of the root level (with its name
835relative to the root level), followed by the first subtree of A (with
836its name relative to A), and so on. The specified number of subtrees
837indicates when the current level of the recursive stack is complete.</pre>
838</div>
839</div>
840</li>
841</ul>
842</div>
843</div>
844<div class="sect2">
845<h3 id="_resolve_undo">Resolve undo</h3>
846<div class="literalblock">
847<div class="content">
848<pre>A conflict is represented in the index as a set of higher stage entries.
849When a conflict is resolved (e.g. with "git add path"), these higher
850stage entries will be removed and a stage-0 entry with proper resolution
851is added.</pre>
852</div>
853</div>
854<div class="literalblock">
855<div class="content">
856<pre>When these higher stage entries are removed, they are saved in the
857resolve undo extension, so that conflicts can be recreated (e.g. with
858"git checkout -m"), in case users want to redo a conflict resolution
859from scratch.</pre>
860</div>
861</div>
862<div class="literalblock">
863<div class="content">
864<pre>The signature for this extension is { 'R', 'E', 'U', 'C' }.</pre>
865</div>
866</div>
867<div class="literalblock">
868<div class="content">
869<pre>A series of entries fill the entire extension; each of which
870consists of:</pre>
871</div>
872</div>
873<div class="ulist">
874<ul>
875<li>
876<p>NUL-terminated pathname the entry describes (relative to the root of
877the repository, i.e. full pathname);</p>
878</li>
879<li>
880<p>Three NUL-terminated ASCII octal numbers, entry mode of entries in
881stage 1 to 3 (a missing stage is represented by "0" in this field);
882and</p>
883</li>
884<li>
885<p>At most three object names of the entry in stages from 1 to 3
886(nothing is written for a missing stage).</p>
887</li>
888</ul>
889</div>
890</div>
891<div class="sect2">
892<h3 id="_split_index">Split index</h3>
893<div class="literalblock">
894<div class="content">
895<pre>In split index mode, the majority of index entries could be stored
896in a separate file. This extension records the changes to be made on
897top of that to produce the final index.</pre>
898</div>
899</div>
900<div class="literalblock">
901<div class="content">
902<pre>The signature for this extension is { 'l', 'i', 'n', 'k' }.</pre>
903</div>
904</div>
905<div class="literalblock">
906<div class="content">
907<pre>The extension consists of:</pre>
908</div>
909</div>
910<div class="ulist">
911<ul>
912<li>
913<p>Hash of the shared index file. The shared index file path
914is $GIT_DIR/sharedindex.&lt;hash&gt;. If all bits are zero, the
915index does not require a shared index file.</p>
916</li>
917<li>
918<p>An ewah-encoded delete bitmap, each bit represents an entry in the
919shared index. If a bit is set, its corresponding entry in the
920shared index will be removed from the final index. Note, because
921a delete operation changes index entry positions, but we do need
922original positions in replace phase, it&#8217;s best to just mark
923entries for removal, then do a mass deletion after replacement.</p>
924</li>
925<li>
926<p>An ewah-encoded replace bitmap, each bit represents an entry in
927the shared index. If a bit is set, its corresponding entry in the
928shared index will be replaced with an entry in this index
929file. All replaced entries are stored in sorted order in this
930index. The first "1" bit in the replace bitmap corresponds to the
931first index entry, the second "1" bit to the second entry and so
932on. Replaced entries may have empty path names to save space.</p>
933<div class="literalblock">
934<div class="content">
935<pre>The remaining index entries after replaced ones will be added to the
936final index. These added entries are also sorted by entry name then
937stage.</pre>
938</div>
939</div>
940</li>
941</ul>
942</div>
943</div>
944</div>
945</div>
946<div class="sect1">
947<h2 id="_untracked_cache">Untracked cache</h2>
948<div class="sectionbody">
949<div class="literalblock">
950<div class="content">
951<pre>Untracked cache saves the untracked file list and necessary data to
952verify the cache. The signature for this extension is { 'U', 'N',
953'T', 'R' }.</pre>
954</div>
955</div>
956<div class="literalblock">
957<div class="content">
958<pre>The extension starts with</pre>
959</div>
960</div>
961<div class="ulist">
962<ul>
963<li>
964<p>A sequence of NUL-terminated strings, preceded by the size of the
965sequence in variable width encoding. Each string describes the
966environment where the cache can be used.</p>
967</li>
968<li>
969<p>Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
970ctime field until "file size".</p>
971</li>
972<li>
973<p>Stat data of core.excludesFile</p>
974</li>
975<li>
976<p>32-bit dir_flags (see struct dir_struct)</p>
977</li>
978<li>
979<p>Hash of $GIT_DIR/info/exclude. A null hash means the file
980does not exist.</p>
981</li>
982<li>
983<p>Hash of core.excludesFile. A null hash means the file does
984not exist.</p>
985</li>
986<li>
987<p>NUL-terminated string of per-dir exclude file name. This usually
988is ".gitignore".</p>
989</li>
990<li>
991<p>The number of following directory blocks, variable width
992encoding. If this number is zero, the extension ends here with a
993following NUL.</p>
994</li>
995<li>
996<p>A number of directory blocks in depth-first-search order, each
997consists of</p>
998</li>
999<li>
1000<p>The number of untracked entries, variable width encoding.</p>
1001</li>
1002<li>
1003<p>The number of sub-directory blocks, variable width encoding.</p>
1004</li>
1005<li>
1006<p>The directory name terminated by NUL.</p>
1007</li>
1008<li>
1009<p>A number of untracked file/dir names terminated by NUL.</p>
1010</li>
1011</ul>
1012</div>
1013<div class="paragraph">
1014<p>The remaining data of each directory block is grouped by type:</p>
1015</div>
1016<div class="ulist">
1017<ul>
1018<li>
1019<p>An ewah bitmap, the n-th bit marks whether the n-th directory has
1020valid untracked cache entries.</p>
1021</li>
1022<li>
1023<p>An ewah bitmap, the n-th bit records "check-only" bit of
1024read_directory_recursive() for the n-th directory.</p>
1025</li>
1026<li>
1027<p>An ewah bitmap, the n-th bit indicates whether hash and stat data
1028is valid for the n-th directory and exists in the next data.</p>
1029</li>
1030<li>
1031<p>An array of stat data. The n-th data corresponds with the n-th
1032"one" bit in the previous ewah bitmap.</p>
1033</li>
1034<li>
1035<p>An array of hashes. The n-th hash corresponds with the n-th "one" bit
1036in the previous ewah bitmap.</p>
1037</li>
1038<li>
1039<p>One NUL.</p>
1040</li>
1041</ul>
1042</div>
1043</div>
1044</div>
1045<div class="sect1">
1046<h2 id="_file_system_monitor_cache">File System Monitor cache</h2>
1047<div class="sectionbody">
1048<div class="literalblock">
1049<div class="content">
1050<pre>The file system monitor cache tracks files for which the core.fsmonitor
1051hook has told us about changes. The signature for this extension is
1052{ 'F', 'S', 'M', 'N' }.</pre>
1053</div>
1054</div>
1055<div class="literalblock">
1056<div class="content">
1057<pre>The extension starts with</pre>
1058</div>
1059</div>
1060<div class="ulist">
1061<ul>
1062<li>
1063<p>32-bit version number: the current supported versions are 1 and 2.</p>
1064</li>
1065<li>
1066<p>(Version 1)
1067 64-bit time: the extension data reflects all changes through the given
1068time which is stored as the nanoseconds elapsed since midnight,
1069January 1, 1970.</p>
1070</li>
1071<li>
1072<p>(Version 2)
1073A null terminated string: an opaque token defined by the file system
1074monitor application. The extension data reflects all changes relative
1075to that token.</p>
1076</li>
1077<li>
1078<p>32-bit bitmap size: the size of the CE_FSMONITOR_VALID bitmap.</p>
1079</li>
1080<li>
1081<p>An ewah bitmap, the n-th bit indicates whether the n-th index entry
1082is not CE_FSMONITOR_VALID.</p>
1083</li>
1084</ul>
1085</div>
1086</div>
1087</div>
1088<div class="sect1">
1089<h2 id="_end_of_index_entry">End of Index Entry</h2>
1090<div class="sectionbody">
1091<div class="literalblock">
1092<div class="content">
1093<pre>The End of Index Entry (EOIE) is used to locate the end of the variable
1094length index entries and the beginning of the extensions. Code can take
1095advantage of this to quickly locate the index extensions without having
1096to parse through all of the index entries.</pre>
1097</div>
1098</div>
1099<div class="literalblock">
1100<div class="content">
1101<pre>Because it must be able to be loaded before the variable length cache
1102entries and other index extensions, this extension must be written last.
1103The signature for this extension is { 'E', 'O', 'I', 'E' }.</pre>
1104</div>
1105</div>
1106<div class="literalblock">
1107<div class="content">
1108<pre>The extension consists of:</pre>
1109</div>
1110</div>
1111<div class="ulist">
1112<ul>
1113<li>
1114<p>32-bit offset to the end of the index entries</p>
1115</li>
1116<li>
1117<p>Hash over the extension types and their sizes (but not
1118their contents). E.g. if we have "TREE" extension that is N-bytes
1119long, "REUC" extension that is M-bytes long, followed by "EOIE",
1120then the hash would be:</p>
1121<div class="literalblock">
1122<div class="content">
1123<pre>Hash("TREE" + &lt;binary-representation-of-N&gt; +
1124"REUC" + &lt;binary-representation-of-M&gt;)</pre>
1125</div>
1126</div>
1127</li>
1128</ul>
1129</div>
1130</div>
1131</div>
1132<div class="sect1">
1133<h2 id="_index_entry_offset_table">Index Entry Offset Table</h2>
1134<div class="sectionbody">
1135<div class="literalblock">
1136<div class="content">
1137<pre>The Index Entry Offset Table (IEOT) is used to help address the CPU
1138cost of loading the index by enabling multi-threading the process of
1139converting cache entries from the on-disk format to the in-memory format.
1140The signature for this extension is { 'I', 'E', 'O', 'T' }.</pre>
1141</div>
1142</div>
1143<div class="literalblock">
1144<div class="content">
1145<pre>The extension consists of:</pre>
1146</div>
1147</div>
1148<div class="ulist">
1149<ul>
1150<li>
1151<p>32-bit version (currently 1)</p>
1152</li>
1153<li>
1154<p>A number of index offset entries each consisting of:</p>
1155</li>
1156<li>
1157<p>32-bit offset from the beginning of the file to the first cache entry
1158in this block of entries.</p>
1159</li>
1160<li>
1161<p>32-bit count of cache entries in this block</p>
1162</li>
1163</ul>
1164</div>
1165</div>
1166</div>
1167<div class="sect1">
1168<h2 id="_sparse_directory_entries">Sparse Directory Entries</h2>
1169<div class="sectionbody">
1170<div class="literalblock">
1171<div class="content">
1172<pre>When using sparse-checkout in cone mode, some entire directories within
1173the index can be summarized by pointing to a tree object instead of the
1174entire expanded list of paths within that tree. An index containing such
1175entries is a "sparse index". Index format versions 4 and less were not
1176implemented with such entries in mind. Thus, for these versions, an
1177index containing sparse directory entries will include this extension
1178with signature { 's', 'd', 'i', 'r' }. Like the split-index extension,
1179tools should avoid interacting with a sparse index unless they understand
1180this extension.</pre>
1181</div>
1182</div>
1183</div>
1184</div>
1185<div class="sect1">
1186<h2 id="_git">GIT</h2>
1187<div class="sectionbody">
1188<div class="paragraph">
1189<p>Part of the <a href="git.html">git(1)</a> suite</p>
1190</div>
1191</div>
1192</div>
1193</div>
1194<div id="footer">
1195<div id="footer-text">
Junio C Hamanod6a33e42025-02-18 23:45:111196Last updated 2025-02-14 21:38:14 -0800
Junio C Hamanob96f40a2024-08-01 00:57:251197</div>
1198</div>
1199</body>
1200</html>