Autogenerated HTML docs for v2.47.0-rc1-33-g90fe38
[git-htmldocs.git] / git-sparse-checkout.html
blob0c69813df52a83ddbac323c96640e9a69c5271d5
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-sparse-checkout(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-sparse-checkout(1) Manual Page</h1>
444 <h2 id="_name">NAME</h2>
445 <div class="sectionbody">
446 <p>git-sparse-checkout - Reduce your working tree to a subset of tracked files</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 sparse-checkout</em> (init | list | set | add | reapply | disable | check-rules) [&lt;options&gt;]</pre>
455 </div>
456 </div>
457 </div>
458 <div class="sect1">
459 <h2 id="_description">DESCRIPTION</h2>
460 <div class="sectionbody">
461 <div class="paragraph">
462 <p>This command is used to create sparse checkouts, which change the
463 working tree from having all tracked files present to only having a
464 subset of those files. It can also switch which subset of files are
465 present, or undo and go back to having all tracked files present in
466 the working copy.</p>
467 </div>
468 <div class="paragraph">
469 <p>The subset of files is chosen by providing a list of directories in
470 cone mode (the default), or by providing a list of patterns in
471 non-cone mode.</p>
472 </div>
473 <div class="paragraph">
474 <p>When in a sparse-checkout, other Git commands behave a bit differently.
475 For example, switching branches will not update paths outside the
476 sparse-checkout directories/patterns, and <code>git commit -a</code> will not record
477 paths outside the sparse-checkout directories/patterns as deleted.</p>
478 </div>
479 <div class="paragraph">
480 <p>THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR, AND THE BEHAVIOR OF OTHER
481 COMMANDS IN THE PRESENCE OF SPARSE-CHECKOUTS, WILL LIKELY CHANGE IN
482 THE FUTURE.</p>
483 </div>
484 </div>
485 </div>
486 <div class="sect1">
487 <h2 id="_commands">COMMANDS</h2>
488 <div class="sectionbody">
489 <div class="dlist">
490 <dl>
491 <dt class="hdlist1"><em>list</em></dt>
492 <dd>
493 <p>Describe the directories or patterns in the sparse-checkout file.</p>
494 </dd>
495 <dt class="hdlist1"><em>set</em></dt>
496 <dd>
497 <p>Enable the necessary sparse-checkout config settings
498 (<code>core.sparseCheckout</code>, <code>core.sparseCheckoutCone</code>, and
499 <code>index.sparse</code>) if they are not already set to the desired values,
500 populate the sparse-checkout file from the list of arguments
501 following the <em>set</em> subcommand, and update the working directory to
502 match.</p>
503 <div class="paragraph">
504 <p>To ensure that adjusting the sparse-checkout settings within a worktree
505 does not alter the sparse-checkout settings in other worktrees, the <em>set</em>
506 subcommand will upgrade your repository config to use worktree-specific
507 config if not already present. The sparsity defined by the arguments to
508 the <em>set</em> subcommand are stored in the worktree-specific sparse-checkout
509 file. See <a href="git-worktree.html">git-worktree(1)</a> and the documentation of
510 <code>extensions.worktreeConfig</code> in <a href="git-config.html">git-config(1)</a> for more details.</p>
511 </div>
512 <div class="paragraph">
513 <p>When the <code>--stdin</code> option is provided, the directories or patterns are
514 read from standard in as a newline-delimited list instead of from the
515 arguments.</p>
516 </div>
517 <div class="paragraph">
518 <p>By default, the input list is considered a list of directories, matching
519 the output of <code>git ls-tree -d --name-only</code>. This includes interpreting
520 pathnames that begin with a double quote (") as C-style quoted strings.
521 Note that all files under the specified directories (at any depth) will
522 be included in the sparse checkout, as well as files that are siblings
523 of either the given directory or any of its ancestors (see <em>CONE PATTERN
524 SET</em> below for more details). In the past, this was not the default,
525 and <code>--cone</code> needed to be specified or <code>core.sparseCheckoutCone</code> needed
526 to be enabled.</p>
527 </div>
528 <div class="paragraph">
529 <p>When <code>--no-cone</code> is passed, the input list is considered a list of
530 patterns. This mode has a number of drawbacks, including not working
531 with some options like <code>--sparse-index</code>. As explained in the
532 "Non-cone Problems" section below, we do not recommend using it.</p>
533 </div>
534 <div class="paragraph">
535 <p>Use the <code>--[no-]sparse-index</code> option to use a sparse index (the
536 default is to not use it). A sparse index reduces the size of the
537 index to be more closely aligned with your sparse-checkout
538 definition. This can have significant performance advantages for
539 commands such as <code>git status</code> or <code>git add</code>. This feature is still
540 experimental. Some commands might be slower with a sparse index until
541 they are properly integrated with the feature.</p>
542 </div>
543 <div class="paragraph">
544 <p><strong>WARNING:</strong> Using a sparse index requires modifying the index in a way
545 that is not completely understood by external tools. If you have trouble
546 with this compatibility, then run <code>git sparse-checkout init --no-sparse-index</code>
547 to rewrite your index to not be sparse. Older versions of Git will not
548 understand the sparse directory entries index extension and may fail to
549 interact with your repository until it is disabled.</p>
550 </div>
551 </dd>
552 <dt class="hdlist1"><em>add</em></dt>
553 <dd>
554 <p>Update the sparse-checkout file to include additional directories
555 (in cone mode) or patterns (in non-cone mode). By default, these
556 directories or patterns are read from the command-line arguments,
557 but they can be read from stdin using the <code>--stdin</code> option.</p>
558 </dd>
559 <dt class="hdlist1"><em>reapply</em></dt>
560 <dd>
561 <p>Reapply the sparsity pattern rules to paths in the working tree.
562 Commands like merge or rebase can materialize paths to do their
563 work (e.g. in order to show you a conflict), and other
564 sparse-checkout commands might fail to sparsify an individual file
565 (e.g. because it has unstaged changes or conflicts). In such
566 cases, it can make sense to run <code>git sparse-checkout reapply</code> later
567 after cleaning up affected paths (e.g. resolving conflicts, undoing
568 or committing changes, etc.).</p>
569 <div class="paragraph">
570 <p>The <code>reapply</code> command can also take <code>--[no-]cone</code> and <code>--[no-]sparse-index</code>
571 flags, with the same meaning as the flags from the <code>set</code> command, in order
572 to change which sparsity mode you are using without needing to also respecify
573 all sparsity paths.</p>
574 </div>
575 </dd>
576 <dt class="hdlist1"><em>disable</em></dt>
577 <dd>
578 <p>Disable the <code>core.sparseCheckout</code> config setting, and restore the
579 working directory to include all files.</p>
580 </dd>
581 <dt class="hdlist1"><em>init</em></dt>
582 <dd>
583 <p>Deprecated command that behaves like <code>set</code> with no specified paths.
584 May be removed in the future.</p>
585 <div class="paragraph">
586 <p>Historically, <code>set</code> did not handle all the necessary config settings,
587 which meant that both <code>init</code> and <code>set</code> had to be called. Invoking
588 both meant the <code>init</code> step would first remove nearly all tracked files
589 (and in cone mode, ignored files too), then the <code>set</code> step would add
590 many of the tracked files (but not ignored files) back. In addition
591 to the lost files, the performance and UI of this combination was
592 poor.</p>
593 </div>
594 <div class="paragraph">
595 <p>Also, historically, <code>init</code> would not actually initialize the
596 sparse-checkout file if it already existed. This meant it was
597 possible to return to a sparse-checkout without remembering which
598 paths to pass to a subsequent <em>set</em> or <em>add</em> command. However,
599 <code>--cone</code> and <code>--sparse-index</code> options would not be remembered across
600 the disable command, so the easy restore of calling a plain <code>init</code>
601 decreased in utility.</p>
602 </div>
603 </dd>
604 <dt class="hdlist1"><em>check-rules</em></dt>
605 <dd>
606 <p>Check whether sparsity rules match one or more paths.</p>
607 <div class="paragraph">
608 <p>By default <code>check-rules</code> reads a list of paths from stdin and outputs only
609 the ones that match the current sparsity rules. The input is expected to consist
610 of one path per line, matching the output of <code>git ls-tree --name-only</code> including
611 that pathnames that begin with a double quote (") are interpreted as C-style
612 quoted strings.</p>
613 </div>
614 <div class="paragraph">
615 <p>When called with the <code>--rules-file &lt;file&gt;</code> flag the input files are matched
616 against the sparse checkout rules found in <code>&lt;file&gt;</code> instead of the current ones.
617 The rules in the files are expected to be in the same form as accepted by <code>git
618 sparse-checkout set --stdin</code> (in particular, they must be newline-delimited).</p>
619 </div>
620 <div class="paragraph">
621 <p>By default, the rules passed to the <code>--rules-file</code> option are interpreted as
622 cone mode directories. To pass non-cone mode patterns with <code>--rules-file</code>,
623 combine the option with the <code>--no-cone</code> option.</p>
624 </div>
625 <div class="paragraph">
626 <p>When called with the <code>-z</code> flag, the format of the paths input on stdin as well
627 as the output paths are \0 terminated and not quoted. Note that this does not
628 apply to the format of the rules passed with the <code>--rules-file</code> option.</p>
629 </div>
630 </dd>
631 </dl>
632 </div>
633 </div>
634 </div>
635 <div class="sect1">
636 <h2 id="_examples">EXAMPLES</h2>
637 <div class="sectionbody">
638 <div class="dlist">
639 <dl>
640 <dt class="hdlist1"><code>git sparse-checkout set MY/DIR1 SUB/DIR2</code></dt>
641 <dd>
642 <p>Change to a sparse checkout with all files (at any depth) under
643 MY/DIR1/ and SUB/DIR2/ present in the working copy (plus all
644 files immediately under MY/ and SUB/ and the toplevel
645 directory). If already in a sparse checkout, change which files
646 are present in the working copy to this new selection. Note
647 that this command will also delete all ignored files in any
648 directory that no longer has either tracked or
649 non-ignored-untracked files present.</p>
650 </dd>
651 <dt class="hdlist1"><code>git sparse-checkout disable</code></dt>
652 <dd>
653 <p>Repopulate the working directory with all files, disabling sparse
654 checkouts.</p>
655 </dd>
656 <dt class="hdlist1"><code>git sparse-checkout add SOME/DIR/ECTORY</code></dt>
657 <dd>
658 <p>Add all files under SOME/DIR/ECTORY/ (at any depth) to the
659 sparse checkout, as well as all files immediately under
660 SOME/DIR/ and immediately under SOME/. Must already be in a
661 sparse checkout before using this command.</p>
662 </dd>
663 <dt class="hdlist1"><code>git sparse-checkout reapply</code></dt>
664 <dd>
665 <p>It is possible for commands to update the working tree in a
666 way that does not respect the selected sparsity directories.
667 This can come from tools external to Git writing files, or
668 even affect Git commands because of either special cases (such
669 as hitting conflicts when merging/rebasing), or because some
670 commands didn&#8217;t fully support sparse checkouts (e.g. the old
671 <code>recursive</code> merge backend had only limited support). This
672 command reapplies the existing sparse directory specifications
673 to make the working directory match.</p>
674 </dd>
675 </dl>
676 </div>
677 </div>
678 </div>
679 <div class="sect1">
680 <h2 id="_internalssparse_checkout">INTERNALS&#8201;&#8212;&#8201;SPARSE CHECKOUT</h2>
681 <div class="sectionbody">
682 <div class="paragraph">
683 <p>"Sparse checkout" allows populating the working directory sparsely. It
684 uses the skip-worktree bit (see <a href="git-update-index.html">git-update-index(1)</a>) to tell Git
685 whether a file in the working directory is worth looking at. If the
686 skip-worktree bit is set, and the file is not present in the working tree,
687 then its absence is ignored. Git will avoid populating the contents of
688 those files, which makes a sparse checkout helpful when working in a
689 repository with many files, but only a few are important to the current
690 user.</p>
691 </div>
692 <div class="paragraph">
693 <p>The <code>$GIT_DIR/info/sparse-checkout</code> file is used to define the
694 skip-worktree reference bitmap. When Git updates the working
695 directory, it updates the skip-worktree bits in the index based
696 on this file. The files matching the patterns in the file will
697 appear in the working directory, and the rest will not.</p>
698 </div>
699 </div>
700 </div>
701 <div class="sect1">
702 <h2 id="_internalsnon_cone_problems">INTERNALS&#8201;&#8212;&#8201;NON-CONE PROBLEMS</h2>
703 <div class="sectionbody">
704 <div class="paragraph">
705 <p>The <code>$GIT_DIR/info/sparse-checkout</code> file populated by the <code>set</code> and
706 <code>add</code> subcommands is defined to be a bunch of patterns (one per line)
707 using the same syntax as <code>.gitignore</code> files. In cone mode, these
708 patterns are restricted to matching directories (and users only ever
709 need supply or see directory names), while in non-cone mode any
710 gitignore-style pattern is permitted. Using the full gitignore-style
711 patterns in non-cone mode has a number of shortcomings:</p>
712 </div>
713 <div class="ulist">
714 <ul>
715 <li>
716 <p>Fundamentally, it makes various worktree-updating processes (pull,
717 merge, rebase, switch, reset, checkout, etc.) require O(N*M) pattern
718 matches, where N is the number of patterns and M is the number of
719 paths in the index. This scales poorly.</p>
720 </li>
721 <li>
722 <p>Avoiding the scaling issue has to be done via limiting the number
723 of patterns via specifying leading directory name or glob.</p>
724 </li>
725 <li>
726 <p>Passing globs on the command line is error-prone as users may
727 forget to quote the glob, causing the shell to expand it into all
728 matching files and pass them all individually along to
729 sparse-checkout set/add. While this could also be a problem with
730 e.g. "git grep&#8201;&#8212;&#8201;*.c", mistakes with grep/log/status appear in
731 the immediate output. With sparse-checkout, the mistake gets
732 recorded at the time the sparse-checkout command is run and might
733 not be problematic until the user later switches branches or rebases
734 or merges, thus putting a delay between the user&#8217;s error and when
735 they have a chance to catch/notice it.</p>
736 </li>
737 <li>
738 <p>Related to the previous item, sparse-checkout has an <em>add</em>
739 subcommand but no <em>remove</em> subcommand. Even if a <em>remove</em>
740 subcommand were added, undoing an accidental unquoted glob runs
741 the risk of "removing too much", as it may remove entries that had
742 been included before the accidental add.</p>
743 </li>
744 <li>
745 <p>Non-cone mode uses gitignore-style patterns to select what to
746 <strong>include</strong> (with the exception of negated patterns), while
747 .gitignore files use gitignore-style patterns to select what to
748 <strong>exclude</strong> (with the exception of negated patterns). The
749 documentation on gitignore-style patterns usually does not talk in
750 terms of matching or non-matching, but on what the user wants to
751 "exclude". This can cause confusion for users trying to learn how
752 to specify sparse-checkout patterns to get their desired behavior.</p>
753 </li>
754 <li>
755 <p>Every other git subcommand that wants to provide "special path
756 pattern matching" of some sort uses pathspecs, but non-cone mode
757 for sparse-checkout uses gitignore patterns, which feels
758 inconsistent.</p>
759 </li>
760 <li>
761 <p>It has edge cases where the "right" behavior is unclear. Two examples:</p>
762 <div class="literalblock">
763 <div class="content">
764 <pre>First, two users are in a subdirectory, and the first runs
765 git sparse-checkout set '/toplevel-dir/*.c'
766 while the second runs
767 git sparse-checkout set relative-dir
768 Should those arguments be transliterated into
769 current/subdirectory/toplevel-dir/*.c
771 current/subdirectory/relative-dir
772 before inserting into the sparse-checkout file? The user who typed
773 the first command is probably aware that arguments to set/add are
774 supposed to be patterns in non-cone mode, and probably would not be
775 happy with such a transliteration. However, many gitignore-style
776 patterns are just paths, which might be what the user who typed the
777 second command was thinking, and they'd be upset if their argument
778 wasn't transliterated.</pre>
779 </div>
780 </div>
781 <div class="literalblock">
782 <div class="content">
783 <pre>Second, what should bash-completion complete on for set/add commands
784 for non-cone users? If it suggests paths, is it exacerbating the
785 problem above? Also, if it suggests paths, what if the user has a
786 file or directory that begins with either a '!' or '#' or has a '*',
787 '\', '?', '[', or ']' in its name? And if it suggests paths, will
788 it complete "/pro" to "/proc" (in the root filesystem) rather than to
789 "/progress.txt" in the current directory? (Note that users are
790 likely to want to start paths with a leading '/' in non-cone mode,
791 for the same reason that .gitignore files often have one.)
792 Completing on files or directories might give nasty surprises in
793 all these cases.</pre>
794 </div>
795 </div>
796 </li>
797 <li>
798 <p>The excessive flexibility made other extensions essentially
799 impractical. <code>--sparse-index</code> is likely impossible in non-cone
800 mode; even if it is somehow feasible, it would have been far more
801 work to implement and may have been too slow in practice. Some
802 ideas for adding coupling between partial clones and sparse
803 checkouts are only practical with a more restricted set of paths
804 as well.</p>
805 </li>
806 </ul>
807 </div>
808 <div class="paragraph">
809 <p>For all these reasons, non-cone mode is deprecated. Please switch to
810 using cone mode.</p>
811 </div>
812 </div>
813 </div>
814 <div class="sect1">
815 <h2 id="_internalscone_mode_handling">INTERNALS&#8201;&#8212;&#8201;CONE MODE HANDLING</h2>
816 <div class="sectionbody">
817 <div class="paragraph">
818 <p>The "cone mode", which is the default, lets you specify only what
819 directories to include. For any directory specified, all paths below
820 that directory will be included, and any paths immediately under
821 leading directories (including the toplevel directory) will also be
822 included. Thus, if you specified the directory
823 Documentation/technical/
824 then your sparse checkout would contain:</p>
825 </div>
826 <div class="ulist">
827 <ul>
828 <li>
829 <p>all files in the toplevel-directory</p>
830 </li>
831 <li>
832 <p>all files immediately under Documentation/</p>
833 </li>
834 <li>
835 <p>all files at any depth under Documentation/technical/</p>
836 </li>
837 </ul>
838 </div>
839 <div class="paragraph">
840 <p>Also, in cone mode, even if no directories are specified, then the
841 files in the toplevel directory will be included.</p>
842 </div>
843 <div class="paragraph">
844 <p>When changing the sparse-checkout patterns in cone mode, Git will inspect each
845 tracked directory that is not within the sparse-checkout cone to see if it
846 contains any untracked files. If all of those files are ignored due to the
847 <code>.gitignore</code> patterns, then the directory will be deleted. If any of the
848 untracked files within that directory is not ignored, then no deletions will
849 occur within that directory and a warning message will appear. If these files
850 are important, then reset your sparse-checkout definition so they are included,
851 use <code>git add</code> and <code>git commit</code> to store them, then remove any remaining files
852 manually to ensure Git can behave optimally.</p>
853 </div>
854 <div class="paragraph">
855 <p>See also the "Internals&#8201;&#8212;&#8201;Cone Pattern Set" section to learn how the
856 directories are transformed under the hood into a subset of the
857 Full Pattern Set of sparse-checkout.</p>
858 </div>
859 </div>
860 </div>
861 <div class="sect1">
862 <h2 id="_internalsfull_pattern_set">INTERNALS&#8201;&#8212;&#8201;FULL PATTERN SET</h2>
863 <div class="sectionbody">
864 <div class="paragraph">
865 <p>The full pattern set allows for arbitrary pattern matches and complicated
866 inclusion/exclusion rules. These can result in O(N*M) pattern matches when
867 updating the index, where N is the number of patterns and M is the number
868 of paths in the index. To combat this performance issue, a more restricted
869 pattern set is allowed when <code>core.sparseCheckoutCone</code> is enabled.</p>
870 </div>
871 <div class="paragraph">
872 <p>The sparse-checkout file uses the same syntax as <code>.gitignore</code> files;
873 see <a href="gitignore.html">gitignore(5)</a> for details. Here, though, the patterns are
874 usually being used to select which files to include rather than which
875 files to exclude. (However, it can get a bit confusing since
876 gitignore-style patterns have negations defined by patterns which
877 begin with a <em>!</em>, so you can also select files to <em>not</em> include.)</p>
878 </div>
879 <div class="paragraph">
880 <p>For example, to select everything, and then to remove the file
881 <code>unwanted</code> (so that every file will appear in your working tree except
882 the file named <code>unwanted</code>):</p>
883 </div>
884 <div class="literalblock">
885 <div class="content">
886 <pre>git sparse-checkout set --no-cone '/*' '!unwanted'</pre>
887 </div>
888 </div>
889 <div class="paragraph">
890 <p>These patterns are just placed into the
891 <code>$GIT_DIR/info/sparse-checkout</code> as-is, so the contents of that file
892 at this point would be</p>
893 </div>
894 <div class="listingblock">
895 <div class="content">
896 <pre>/*
897 !unwanted</pre>
898 </div>
899 </div>
900 <div class="paragraph">
901 <p>See also the "Sparse Checkout" section of <a href="git-read-tree.html">git-read-tree(1)</a> to
902 learn more about the gitignore-style patterns used in sparse
903 checkouts.</p>
904 </div>
905 </div>
906 </div>
907 <div class="sect1">
908 <h2 id="_internalscone_pattern_set">INTERNALS&#8201;&#8212;&#8201;CONE PATTERN SET</h2>
909 <div class="sectionbody">
910 <div class="paragraph">
911 <p>In cone mode, only directories are accepted, but they are translated into
912 the same gitignore-style patterns used in the full pattern set. We refer
913 to the particular patterns used in those mode as being of one of two types:</p>
914 </div>
915 <div class="olist arabic">
916 <ol class="arabic">
917 <li>
918 <p><strong>Recursive:</strong> All paths inside a directory are included.</p>
919 </li>
920 <li>
921 <p><strong>Parent:</strong> All files immediately inside a directory are included.</p>
922 </li>
923 </ol>
924 </div>
925 <div class="paragraph">
926 <p>Since cone mode always includes files at the toplevel, when running
927 <code>git sparse-checkout set</code> with no directories specified, the toplevel
928 directory is added as a parent pattern. At this point, the
929 sparse-checkout file contains the following patterns:</p>
930 </div>
931 <div class="listingblock">
932 <div class="content">
933 <pre>/*
934 !/*/</pre>
935 </div>
936 </div>
937 <div class="paragraph">
938 <p>This says "include everything immediately under the toplevel
939 directory, but nothing at any level below that."</p>
940 </div>
941 <div class="paragraph">
942 <p>When in cone mode, the <code>git sparse-checkout set</code> subcommand takes a
943 list of directories. The command <code>git sparse-checkout set A/B/C</code> sets
944 the directory <code>A/B/C</code> as a recursive pattern, the directories <code>A</code> and
945 <code>A/B</code> are added as parent patterns. The resulting sparse-checkout file
946 is now</p>
947 </div>
948 <div class="listingblock">
949 <div class="content">
950 <pre>/*
951 !/*/
953 !/A/*/
954 /A/B/
955 !/A/B/*/
956 /A/B/C/</pre>
957 </div>
958 </div>
959 <div class="paragraph">
960 <p>Here, order matters, so the negative patterns are overridden by the positive
961 patterns that appear lower in the file.</p>
962 </div>
963 <div class="paragraph">
964 <p>Unless <code>core.sparseCheckoutCone</code> is explicitly set to <code>false</code>, Git will
965 parse the sparse-checkout file expecting patterns of these types. Git will
966 warn if the patterns do not match. If the patterns do match the expected
967 format, then Git will use faster hash-based algorithms to compute inclusion
968 in the sparse-checkout. If they do not match, git will behave as though
969 <code>core.sparseCheckoutCone</code> was false, regardless of its setting.</p>
970 </div>
971 <div class="paragraph">
972 <p>In the cone mode case, despite the fact that full patterns are written
973 to the $GIT_DIR/info/sparse-checkout file, the <code>git sparse-checkout
974 list</code> subcommand will list the directories that define the recursive
975 patterns. For the example sparse-checkout file above, the output is as
976 follows:</p>
977 </div>
978 <div class="listingblock">
979 <div class="content">
980 <pre>$ git sparse-checkout list
981 A/B/C</pre>
982 </div>
983 </div>
984 <div class="paragraph">
985 <p>If <code>core.ignoreCase=true</code>, then the pattern-matching algorithm will use a
986 case-insensitive check. This corrects for case mismatched filenames in the
987 <em>git sparse-checkout set</em> command to reflect the expected cone in the working
988 directory.</p>
989 </div>
990 </div>
991 </div>
992 <div class="sect1">
993 <h2 id="_internalssubmodules">INTERNALS&#8201;&#8212;&#8201;SUBMODULES</h2>
994 <div class="sectionbody">
995 <div class="paragraph">
996 <p>If your repository contains one or more submodules, then submodules
997 are populated based on interactions with the <code>git submodule</code> command.
998 Specifically, <code>git submodule init -- &lt;path&gt;</code> will ensure the submodule
999 at <code>&lt;path&gt;</code> is present, while <code>git submodule deinit [-f] -- &lt;path&gt;</code>
1000 will remove the files for the submodule at <code>&lt;path&gt;</code> (including any
1001 untracked files, uncommitted changes, and unpushed history). Similar
1002 to how sparse-checkout removes files from the working tree but still
1003 leaves entries in the index, deinitialized submodules are removed from
1004 the working directory but still have an entry in the index.</p>
1005 </div>
1006 <div class="paragraph">
1007 <p>Since submodules may have unpushed changes or untracked files,
1008 removing them could result in data loss. Thus, changing sparse
1009 inclusion/exclusion rules will not cause an already checked out
1010 submodule to be removed from the working copy. Said another way, just
1011 as <code>checkout</code> will not cause submodules to be automatically removed or
1012 initialized even when switching between branches that remove or add
1013 submodules, using <code>sparse-checkout</code> to reduce or expand the scope of
1014 "interesting" files will not cause submodules to be automatically
1015 deinitialized or initialized either.</p>
1016 </div>
1017 <div class="paragraph">
1018 <p>Further, the above facts mean that there are multiple reasons that
1019 "tracked" files might not be present in the working copy: sparsity
1020 pattern application from sparse-checkout, and submodule initialization
1021 state. Thus, commands like <code>git grep</code> that work on tracked files in
1022 the working copy may return results that are limited by either or both
1023 of these restrictions.</p>
1024 </div>
1025 </div>
1026 </div>
1027 <div class="sect1">
1028 <h2 id="_see_also">SEE ALSO</h2>
1029 <div class="sectionbody">
1030 <div class="paragraph">
1031 <p><a href="git-read-tree.html">git-read-tree(1)</a>
1032 <a href="gitignore.html">gitignore(5)</a></p>
1033 </div>
1034 </div>
1035 </div>
1036 <div class="sect1">
1037 <h2 id="_git">GIT</h2>
1038 <div class="sectionbody">
1039 <div class="paragraph">
1040 <p>Part of the <a href="git.html">git(1)</a> suite</p>
1041 </div>
1042 </div>
1043 </div>
1044 </div>
1045 <div id="footer">
1046 <div id="footer-text">
1047 Last updated 2023-06-23 13:24:09 -0700
1048 </div>
1049 </div>
1050 </body>
1051 </html>