Autogenerated HTML docs for v2.47.0-229-g8f8d6
[git-htmldocs.git] / git-read-tree.html
blob2709b80fb1442cc4cb528921bda5d7fee8bac1d2
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>git-read-tree(1)</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>git-read-tree(1) Manual Page</h1>
444 <h2 id="_name">NAME</h2>
445 <div class="sectionbody">
446 <p>git-read-tree - Reads tree information into the index</p>
447 </div>
448 </div>
449 <div id="content">
450 <div class="sect1">
451 <h2 id="_synopsis">SYNOPSIS</h2>
452 <div class="sectionbody">
453 <div class="verseblock">
454 <pre class="content"><em>git read-tree</em> [(-m [--trivial] [--aggressive] | --reset | --prefix=&lt;prefix&gt;)
455 [-u | -i]] [--index-output=&lt;file&gt;] [--no-sparse-checkout]
456 (--empty | &lt;tree-ish1&gt; [&lt;tree-ish2&gt; [&lt;tree-ish3&gt;]])</pre>
457 </div>
458 </div>
459 </div>
460 <div class="sect1">
461 <h2 id="_description">DESCRIPTION</h2>
462 <div class="sectionbody">
463 <div class="paragraph">
464 <p>Reads the tree information given by &lt;tree-ish&gt; into the index,
465 but does not actually <strong>update</strong> any of the files it "caches". (see:
466 <a href="git-checkout-index.html">git-checkout-index(1)</a>)</p>
467 </div>
468 <div class="paragraph">
469 <p>Optionally, it can merge a tree into the index, perform a
470 fast-forward (i.e. 2-way) merge, or a 3-way merge, with the <code>-m</code>
471 flag. When used with <code>-m</code>, the <code>-u</code> flag causes it to also update
472 the files in the work tree with the result of the merge.</p>
473 </div>
474 <div class="paragraph">
475 <p>Only trivial merges are done by <em>git read-tree</em> itself. Only conflicting paths
476 will be in an unmerged state when <em>git read-tree</em> returns.</p>
477 </div>
478 </div>
479 </div>
480 <div class="sect1">
481 <h2 id="_options">OPTIONS</h2>
482 <div class="sectionbody">
483 <div class="dlist">
484 <dl>
485 <dt class="hdlist1">-m</dt>
486 <dd>
487 <p>Perform a merge, not just a read. The command will
488 refuse to run if your index file has unmerged entries,
489 indicating that you have not finished a previous merge you
490 started.</p>
491 </dd>
492 <dt class="hdlist1">--reset</dt>
493 <dd>
494 <p>Same as -m, except that unmerged entries are discarded instead
495 of failing. When used with <code>-u</code>, updates leading to loss of
496 working tree changes or untracked files or directories will not
497 abort the operation.</p>
498 </dd>
499 <dt class="hdlist1">-u</dt>
500 <dd>
501 <p>After a successful merge, update the files in the work
502 tree with the result of the merge.</p>
503 </dd>
504 <dt class="hdlist1">-i</dt>
505 <dd>
506 <p>Usually a merge requires the index file as well as the
507 files in the working tree to be up to date with the
508 current head commit, in order not to lose local
509 changes. This flag disables the check with the working
510 tree and is meant to be used when creating a merge of
511 trees that are not directly related to the current
512 working tree status into a temporary index file.</p>
513 </dd>
514 <dt class="hdlist1">-n</dt>
515 <dt class="hdlist1">--dry-run</dt>
516 <dd>
517 <p>Check if the command would error out, without updating the index
518 or the files in the working tree for real.</p>
519 </dd>
520 <dt class="hdlist1">-v</dt>
521 <dd>
522 <p>Show the progress of checking files out.</p>
523 </dd>
524 <dt class="hdlist1">--trivial</dt>
525 <dd>
526 <p>Restrict three-way merge by <em>git read-tree</em> to happen
527 only if there is no file-level merging required, instead
528 of resolving merge for trivial cases and leaving
529 conflicting files unresolved in the index.</p>
530 </dd>
531 <dt class="hdlist1">--aggressive</dt>
532 <dd>
533 <p>Usually a three-way merge by <em>git read-tree</em> resolves
534 the merge for really trivial cases and leaves other
535 cases unresolved in the index, so that porcelains can
536 implement different merge policies. This flag makes the
537 command resolve a few more cases internally:</p>
538 <div class="ulist">
539 <ul>
540 <li>
541 <p>when one side removes a path and the other side leaves the path
542 unmodified. The resolution is to remove that path.</p>
543 </li>
544 <li>
545 <p>when both sides remove a path. The resolution is to remove that path.</p>
546 </li>
547 <li>
548 <p>when both sides add a path identically. The resolution
549 is to add that path.</p>
550 </li>
551 </ul>
552 </div>
553 </dd>
554 <dt class="hdlist1">--prefix=&lt;prefix&gt;</dt>
555 <dd>
556 <p>Keep the current index contents, and read the contents
557 of the named tree-ish under the directory at <em>&lt;prefix&gt;</em>.
558 The command will refuse to overwrite entries that already
559 existed in the original index file.</p>
560 </dd>
561 <dt class="hdlist1">--index-output=&lt;file&gt;</dt>
562 <dd>
563 <p>Instead of writing the results out to <code>$GIT_INDEX_FILE</code>,
564 write the resulting index in the named file. While the
565 command is operating, the original index file is locked
566 with the same mechanism as usual. The file must allow
567 to be rename(2)ed into from a temporary file that is
568 created next to the usual index file; typically this
569 means it needs to be on the same filesystem as the index
570 file itself, and you need write permission to the
571 directories the index file and index output file are
572 located in.</p>
573 </dd>
574 <dt class="hdlist1">--[no-]recurse-submodules</dt>
575 <dd>
576 <p>Using --recurse-submodules will update the content of all active
577 submodules according to the commit recorded in the superproject by
578 calling read-tree recursively, also setting the submodules' HEAD to be
579 detached at that commit.</p>
580 </dd>
581 <dt class="hdlist1">--no-sparse-checkout</dt>
582 <dd>
583 <p>Disable sparse checkout support even if <code>core.sparseCheckout</code>
584 is true.</p>
585 </dd>
586 <dt class="hdlist1">--empty</dt>
587 <dd>
588 <p>Instead of reading tree object(s) into the index, just empty
589 it.</p>
590 </dd>
591 <dt class="hdlist1">-q</dt>
592 <dt class="hdlist1">--quiet</dt>
593 <dd>
594 <p>Quiet, suppress feedback messages.</p>
595 </dd>
596 <dt class="hdlist1">&lt;tree-ish#&gt;</dt>
597 <dd>
598 <p>The id of the tree object(s) to be read/merged.</p>
599 </dd>
600 </dl>
601 </div>
602 </div>
603 </div>
604 <div class="sect1">
605 <h2 id="_merging">MERGING</h2>
606 <div class="sectionbody">
607 <div class="paragraph">
608 <p>If <code>-m</code> is specified, <em>git read-tree</em> can perform 3 kinds of
609 merge, a single tree merge if only 1 tree is given, a
610 fast-forward merge with 2 trees, or a 3-way merge if 3 or more trees are
611 provided.</p>
612 </div>
613 <div class="sect2">
614 <h3 id="_single_tree_merge">Single Tree Merge</h3>
615 <div class="paragraph">
616 <p>If only 1 tree is specified, <em>git read-tree</em> operates as if the user did not
617 specify <code>-m</code>, except that if the original index has an entry for a
618 given pathname, and the contents of the path match with the tree
619 being read, the stat info from the index is used. (In other words, the
620 index&#8217;s stat()s take precedence over the merged tree&#8217;s).</p>
621 </div>
622 <div class="paragraph">
623 <p>That means that if you do a <code>git</code> <code>read-tree</code> <code>-m</code> <em>&lt;newtree&gt;</em> followed by a
624 <code>git</code> <code>checkout-index</code> <code>-f</code> <code>-u</code> <code>-a</code>, the <em>git checkout-index</em> only checks out
625 the stuff that really changed.</p>
626 </div>
627 <div class="paragraph">
628 <p>This is used to avoid unnecessary false hits when <em>git diff-files</em> is
629 run after <em>git read-tree</em>.</p>
630 </div>
631 </div>
632 <div class="sect2">
633 <h3 id="_two_tree_merge">Two Tree Merge</h3>
634 <div class="paragraph">
635 <p>Typically, this is invoked as <code>git</code> <code>read-tree</code> <code>-m</code> <code>$H</code> <code>$M</code>, where $H
636 is the head commit of the current repository, and $M is the head
637 of a foreign tree, which is simply ahead of $H (i.e. we are in a
638 fast-forward situation).</p>
639 </div>
640 <div class="paragraph">
641 <p>When two trees are specified, the user is telling <em>git read-tree</em>
642 the following:</p>
643 </div>
644 <div class="olist arabic">
645 <ol class="arabic">
646 <li>
647 <p>The current index and work tree is derived from $H, but
648 the user may have local changes in them since $H.</p>
649 </li>
650 <li>
651 <p>The user wants to fast-forward to $M.</p>
652 </li>
653 </ol>
654 </div>
655 <div class="paragraph">
656 <p>In this case, the <code>git</code> <code>read-tree</code> <code>-m</code> <code>$H</code> <code>$M</code> command makes sure
657 that no local change is lost as the result of this "merge".
658 Here are the "carry forward" rules, where "I" denotes the index,
659 "clean" means that index and work tree coincide, and "exists"/"nothing"
660 refer to the presence of a path in the specified commit:</p>
661 </div>
662 <div class="literalblock">
663 <div class="content">
664 <pre> I H M Result
665 -------------------------------------------------------
666 0 nothing nothing nothing (does not happen)
667 1 nothing nothing exists use M
668 2 nothing exists nothing remove path from index
669 3 nothing exists exists, use M if "initial checkout",
670 H == M keep index otherwise
671 exists, fail
672 H != M
674 clean I==H I==M
675 ------------------
676 4 yes N/A N/A nothing nothing keep index
677 5 no N/A N/A nothing nothing keep index
679 6 yes N/A yes nothing exists keep index
680 7 no N/A yes nothing exists keep index
681 8 yes N/A no nothing exists fail
682 9 no N/A no nothing exists fail
684 10 yes yes N/A exists nothing remove path from index
685 11 no yes N/A exists nothing fail
686 12 yes no N/A exists nothing fail
687 13 no no N/A exists nothing fail
689 clean (H==M)
690 ------
691 14 yes exists exists keep index
692 15 no exists exists keep index
694 clean I==H I==M (H!=M)
695 ------------------
696 16 yes no no exists exists fail
697 17 no no no exists exists fail
698 18 yes no yes exists exists keep index
699 19 no no yes exists exists keep index
700 20 yes yes no exists exists use M
701 21 no yes no exists exists fail</pre>
702 </div>
703 </div>
704 <div class="paragraph">
705 <p>In all "keep index" cases, the index entry stays as in the
706 original index file. If the entry is not up to date,
707 <em>git read-tree</em> keeps the copy in the work tree intact when
708 operating under the -u flag.</p>
709 </div>
710 <div class="paragraph">
711 <p>When this form of <em>git read-tree</em> returns successfully, you can
712 see which of the "local changes" that you made were carried forward by running
713 <code>git</code> <code>diff-index</code> <code>--cached</code> <code>$M</code>. Note that this does not
714 necessarily match what <code>git</code> <code>diff-index</code> <code>--cached</code> <code>$H</code> would have
715 produced before such a two tree merge. This is because of cases
716 18 and 19&#8201;&#8212;&#8201;if you already had the changes in $M (e.g. maybe
717 you picked it up via e-mail in a patch form), <code>git</code> <code>diff-index</code>
718 <code>--cached</code> <code>$H</code> would have told you about the change before this
719 merge, but it would not show in <code>git</code> <code>diff-index</code> <code>--cached</code> <code>$M</code>
720 output after the two-tree merge.</p>
721 </div>
722 <div class="paragraph">
723 <p>Case 3 is slightly tricky and needs explanation. The result from this
724 rule logically should be to remove the path if the user staged the removal
725 of the path and then switching to a new branch. That however will prevent
726 the initial checkout from happening, so the rule is modified to use M (new
727 tree) only when the content of the index is empty. Otherwise the removal
728 of the path is kept as long as $H and $M are the same.</p>
729 </div>
730 </div>
731 <div class="sect2">
732 <h3 id="_3_way_merge">3-Way Merge</h3>
733 <div class="paragraph">
734 <p>Each "index" entry has two bits worth of "stage" state. stage 0 is the
735 normal one, and is the only one you&#8217;d see in any kind of normal use.</p>
736 </div>
737 <div class="paragraph">
738 <p>However, when you do <em>git read-tree</em> with three trees, the "stage"
739 starts out at 1.</p>
740 </div>
741 <div class="paragraph">
742 <p>This means that you can do</p>
743 </div>
744 <div class="listingblock">
745 <div class="content">
746 <pre>$ git read-tree -m &lt;tree1&gt; &lt;tree2&gt; &lt;tree3&gt;</pre>
747 </div>
748 </div>
749 <div class="paragraph">
750 <p>and you will end up with an index with all of the &lt;tree1&gt; entries in
751 "stage1", all of the &lt;tree2&gt; entries in "stage2" and all of the
752 &lt;tree3&gt; entries in "stage3". When performing a merge of another
753 branch into the current branch, we use the common ancestor tree
754 as &lt;tree1&gt;, the current branch head as &lt;tree2&gt;, and the other
755 branch head as &lt;tree3&gt;.</p>
756 </div>
757 <div class="paragraph">
758 <p>Furthermore, <em>git read-tree</em> has special-case logic that says: if you see
759 a file that matches in all respects in the following states, it
760 "collapses" back to "stage0":</p>
761 </div>
762 <div class="ulist">
763 <ul>
764 <li>
765 <p>stage 2 and 3 are the same; take one or the other (it makes no
766 difference - the same work has been done on our branch in
767 stage 2 and their branch in stage 3)</p>
768 </li>
769 <li>
770 <p>stage 1 and stage 2 are the same and stage 3 is different; take
771 stage 3 (our branch in stage 2 did not do anything since the
772 ancestor in stage 1 while their branch in stage 3 worked on
773 it)</p>
774 </li>
775 <li>
776 <p>stage 1 and stage 3 are the same and stage 2 is different take
777 stage 2 (we did something while they did nothing)</p>
778 </li>
779 </ul>
780 </div>
781 <div class="paragraph">
782 <p>The <em>git write-tree</em> command refuses to write a nonsensical tree, and it
783 will complain about unmerged entries if it sees a single entry that is not
784 stage 0.</p>
785 </div>
786 <div class="paragraph">
787 <p>OK, this all sounds like a collection of totally nonsensical rules,
788 but it&#8217;s actually exactly what you want in order to do a fast
789 merge. The different stages represent the "result tree" (stage 0, aka
790 "merged"), the original tree (stage 1, aka "orig"), and the two trees
791 you are trying to merge (stage 2 and 3 respectively).</p>
792 </div>
793 <div class="paragraph">
794 <p>The order of stages 1, 2 and 3 (hence the order of three
795 &lt;tree-ish&gt; command-line arguments) are significant when you
796 start a 3-way merge with an index file that is already
797 populated. Here is an outline of how the algorithm works:</p>
798 </div>
799 <div class="ulist">
800 <ul>
801 <li>
802 <p>if a file exists in identical format in all three trees, it will
803 automatically collapse to "merged" state by <em>git read-tree</em>.</p>
804 </li>
805 <li>
806 <p>a file that has <em>any</em> difference what-so-ever in the three trees
807 will stay as separate entries in the index. It&#8217;s up to "porcelain
808 policy" to determine how to remove the non-0 stages, and insert a
809 merged version.</p>
810 </li>
811 <li>
812 <p>the index file saves and restores with all this information, so you
813 can merge things incrementally, but as long as it has entries in
814 stages 1/2/3 (i.e., "unmerged entries") you can&#8217;t write the result. So
815 now the merge algorithm ends up being really simple:</p>
816 <div class="ulist">
817 <ul>
818 <li>
819 <p>you walk the index in order, and ignore all entries of stage 0,
820 since they&#8217;ve already been done.</p>
821 </li>
822 <li>
823 <p>if you find a "stage1", but no matching "stage2" or "stage3", you
824 know it&#8217;s been removed from both trees (it only existed in the
825 original tree), and you remove that entry.</p>
826 </li>
827 <li>
828 <p>if you find a matching "stage2" and "stage3" tree, you remove one
829 of them, and turn the other into a "stage0" entry. Remove any
830 matching "stage1" entry if it exists too. .. all the normal
831 trivial rules ..</p>
832 </li>
833 </ul>
834 </div>
835 </li>
836 </ul>
837 </div>
838 <div class="paragraph">
839 <p>You would normally use <em>git merge-index</em> with supplied
840 <em>git merge-one-file</em> to do this last step. The script updates
841 the files in the working tree as it merges each path and at the
842 end of a successful merge.</p>
843 </div>
844 <div class="paragraph">
845 <p>When you start a 3-way merge with an index file that is already
846 populated, it is assumed that it represents the state of the
847 files in your work tree, and you can even have files with
848 changes unrecorded in the index file. It is further assumed
849 that this state is "derived" from the stage 2 tree. The 3-way
850 merge refuses to run if it finds an entry in the original index
851 file that does not match stage 2.</p>
852 </div>
853 <div class="paragraph">
854 <p>This is done to prevent you from losing your work-in-progress
855 changes, and mixing your random changes in an unrelated merge
856 commit. To illustrate, suppose you start from what has been
857 committed last to your repository:</p>
858 </div>
859 <div class="listingblock">
860 <div class="content">
861 <pre>$ JC=`git rev-parse --verify "HEAD^0"`
862 $ git checkout-index -f -u -a $JC</pre>
863 </div>
864 </div>
865 <div class="paragraph">
866 <p>You do random edits, without running <em>git update-index</em>. And then
867 you notice that the tip of your "upstream" tree has advanced
868 since you pulled from him:</p>
869 </div>
870 <div class="listingblock">
871 <div class="content">
872 <pre>$ git fetch git://.... linus
873 $ LT=`git rev-parse FETCH_HEAD`</pre>
874 </div>
875 </div>
876 <div class="paragraph">
877 <p>Your work tree is still based on your HEAD ($JC), but you have
878 some edits since. Three-way merge makes sure that you have not
879 added or modified index entries since $JC, and if you haven&#8217;t,
880 then does the right thing. So with the following sequence:</p>
881 </div>
882 <div class="listingblock">
883 <div class="content">
884 <pre>$ git read-tree -m -u `git merge-base $JC $LT` $JC $LT
885 $ git merge-index git-merge-one-file -a
886 $ echo "Merge with Linus" | \
887 git commit-tree `git write-tree` -p $JC -p $LT</pre>
888 </div>
889 </div>
890 <div class="paragraph">
891 <p>what you would commit is a pure merge between $JC and $LT without
892 your work-in-progress changes, and your work tree would be
893 updated to the result of the merge.</p>
894 </div>
895 <div class="paragraph">
896 <p>However, if you have local changes in the working tree that
897 would be overwritten by this merge, <em>git read-tree</em> will refuse
898 to run to prevent your changes from being lost.</p>
899 </div>
900 <div class="paragraph">
901 <p>In other words, there is no need to worry about what exists only
902 in the working tree. When you have local changes in a part of
903 the project that is not involved in the merge, your changes do
904 not interfere with the merge, and are kept intact. When they
905 <strong>do</strong> interfere, the merge does not even start (<em>git read-tree</em>
906 complains loudly and fails without modifying anything). In such
907 a case, you can simply continue doing what you were in the
908 middle of doing, and when your working tree is ready (i.e. you
909 have finished your work-in-progress), attempt the merge again.</p>
910 </div>
911 </div>
912 </div>
913 </div>
914 <div class="sect1">
915 <h2 id="_sparse_checkout">SPARSE CHECKOUT</h2>
916 <div class="sectionbody">
917 <div class="paragraph">
918 <p>Note: The skip-worktree capabilities in <a href="git-update-index.html">git-update-index(1)</a>
919 and <code>read-tree</code> predated the introduction of
920 <a href="git-sparse-checkout.html">git-sparse-checkout(1)</a>. Users are encouraged to use the
921 <code>sparse-checkout</code> command in preference to these plumbing commands for
922 sparse-checkout/skip-worktree related needs. However, the information
923 below might be useful to users trying to understand the pattern style
924 used in non-cone mode of the <code>sparse-checkout</code> command.</p>
925 </div>
926 <div class="paragraph">
927 <p>"Sparse checkout" allows populating the working directory sparsely.
928 It uses the skip-worktree bit (see <a href="git-update-index.html">git-update-index(1)</a>) to
929 tell Git whether a file in the working directory is worth looking at.</p>
930 </div>
931 <div class="paragraph">
932 <p><em>git read-tree</em> and other merge-based commands (<em>git merge</em>, <em>git
933 checkout</em>&#8230;&#8203;) can help maintaining the skip-worktree bitmap and working
934 directory update. <code>$GIT_DIR/info/sparse-checkout</code> is used to
935 define the skip-worktree reference bitmap. When <em>git read-tree</em> needs
936 to update the working directory, it resets the skip-worktree bit in the index
937 based on this file, which uses the same syntax as .gitignore files.
938 If an entry matches a pattern in this file, or the entry corresponds to
939 a file present in the working tree, then skip-worktree will not be
940 set on that entry. Otherwise, skip-worktree will be set.</p>
941 </div>
942 <div class="paragraph">
943 <p>Then it compares the new skip-worktree value with the previous one. If
944 skip-worktree turns from set to unset, it will add the corresponding
945 file back. If it turns from unset to set, that file will be removed.</p>
946 </div>
947 <div class="paragraph">
948 <p>While <code>$GIT_DIR/info/sparse-checkout</code> is usually used to specify what
949 files are in, you can also specify what files are <em>not</em> in, using
950 negate patterns. For example, to remove the file <code>unwanted</code>:</p>
951 </div>
952 <div class="listingblock">
953 <div class="content">
954 <pre>/*
955 !unwanted</pre>
956 </div>
957 </div>
958 <div class="paragraph">
959 <p>Another tricky thing is fully repopulating the working directory when you
960 no longer want sparse checkout. You cannot just disable "sparse
961 checkout" because skip-worktree bits are still in the index and your working
962 directory is still sparsely populated. You should re-populate the working
963 directory with the <code>$GIT_DIR/info/sparse-checkout</code> file content as
964 follows:</p>
965 </div>
966 <div class="listingblock">
967 <div class="content">
968 <pre>/*</pre>
969 </div>
970 </div>
971 <div class="paragraph">
972 <p>Then you can disable sparse checkout. Sparse checkout support in <em>git
973 read-tree</em> and similar commands is disabled by default. You need to
974 turn <code>core.sparseCheckout</code> on in order to have sparse checkout
975 support.</p>
976 </div>
977 </div>
978 </div>
979 <div class="sect1">
980 <h2 id="_see_also">SEE ALSO</h2>
981 <div class="sectionbody">
982 <div class="paragraph">
983 <p><a href="git-write-tree.html">git-write-tree(1)</a>, <a href="git-ls-files.html">git-ls-files(1)</a>,
984 <a href="gitignore.html">gitignore(5)</a>, <a href="git-sparse-checkout.html">git-sparse-checkout(1)</a></p>
985 </div>
986 </div>
987 </div>
988 <div class="sect1">
989 <h2 id="_git">GIT</h2>
990 <div class="sectionbody">
991 <div class="paragraph">
992 <p>Part of the <a href="git.html">git(1)</a> suite</p>
993 </div>
994 </div>
995 </div>
996 </div>
997 <div id="footer">
998 <div id="footer-text">
999 Last updated 2023-10-23 14:43:46 -0700
1000 </div>
1001 </div>
1002 </body>
1003 </html>