Autogenerated HTML docs for v2.46.0-540-g4c42d
[git-htmldocs.git] / git-daemon.html
blob2dd4697a692560621e05a9e44095dd455b8bc32a
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-daemon(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-daemon(1) Manual Page</h1>
444 <h2 id="_name">NAME</h2>
445 <div class="sectionbody">
446 <p>git-daemon - A really simple server for Git repositories</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 daemon</em> [--verbose] [--syslog] [--export-all]
455 [--timeout=&lt;n&gt;] [--init-timeout=&lt;n&gt;] [--max-connections=&lt;n&gt;]
456 [--strict-paths] [--base-path=&lt;path&gt;] [--base-path-relaxed]
457 [--user-path | --user-path=&lt;path&gt;]
458 [--interpolated-path=&lt;pathtemplate&gt;]
459 [--reuseaddr] [--detach] [--pid-file=&lt;file&gt;]
460 [--enable=&lt;service&gt;] [--disable=&lt;service&gt;]
461 [--allow-override=&lt;service&gt;] [--forbid-override=&lt;service&gt;]
462 [--access-hook=&lt;path&gt;] [--[no-]informative-errors]
463 [--inetd |
464 [--listen=&lt;host-or-ipaddr&gt;] [--port=&lt;n&gt;]
465 [--user=&lt;user&gt; [--group=&lt;group&gt;]]]
466 [--log-destination=(stderr|syslog|none)]
467 [&lt;directory&gt;&#8230;&#8203;]</pre>
468 </div>
469 </div>
470 </div>
471 <div class="sect1">
472 <h2 id="_description">DESCRIPTION</h2>
473 <div class="sectionbody">
474 <div class="paragraph">
475 <p>A really simple TCP Git daemon that normally listens on port "DEFAULT_GIT_PORT"
476 aka 9418. It waits for a connection asking for a service, and will serve
477 that service if it is enabled.</p>
478 </div>
479 <div class="paragraph">
480 <p>It verifies that the directory has the magic file "git-daemon-export-ok", and
481 it will refuse to export any Git directory that hasn&#8217;t explicitly been marked
482 for export this way (unless the <code>--export-all</code> parameter is specified). If you
483 pass some directory paths as <em>git daemon</em> arguments, the offers are limited to
484 repositories within those directories.</p>
485 </div>
486 <div class="paragraph">
487 <p>By default, only <code>upload-pack</code> service is enabled, which serves
488 <em>git fetch-pack</em> and <em>git ls-remote</em> clients, which are invoked
489 from <em>git fetch</em>, <em>git pull</em>, and <em>git clone</em>.</p>
490 </div>
491 <div class="paragraph">
492 <p>This is ideally suited for read-only updates, i.e., pulling from
493 Git repositories.</p>
494 </div>
495 <div class="paragraph">
496 <p>An <code>upload-archive</code> also exists to serve <em>git archive</em>.</p>
497 </div>
498 </div>
499 </div>
500 <div class="sect1">
501 <h2 id="_options">OPTIONS</h2>
502 <div class="sectionbody">
503 <div class="dlist">
504 <dl>
505 <dt class="hdlist1">--strict-paths</dt>
506 <dd>
507 <p>Match paths exactly (i.e. don&#8217;t allow "/foo/repo" when the real path is
508 "/foo/repo.git" or "/foo/repo/.git") and don&#8217;t do user-relative paths.
509 <em>git daemon</em> will refuse to start when this option is enabled and no
510 directory arguments are provided.</p>
511 </dd>
512 <dt class="hdlist1">--base-path=&lt;path&gt;</dt>
513 <dd>
514 <p>Remap all the path requests as relative to the given path.
515 This is sort of "Git root" - if you run <em>git daemon</em> with
516 <em>--base-path=/srv/git</em> on example.com, then if you later try to pull
517 <em>git://example.com/hello.git</em>, <em>git daemon</em> will interpret the path
518 as <code>/srv/git/hello.git</code>.</p>
519 </dd>
520 <dt class="hdlist1">--base-path-relaxed</dt>
521 <dd>
522 <p>If --base-path is enabled and repo lookup fails, with this option
523 <em>git daemon</em> will attempt to lookup without prefixing the base path.
524 This is useful for switching to --base-path usage, while still
525 allowing the old paths.</p>
526 </dd>
527 <dt class="hdlist1">--interpolated-path=&lt;pathtemplate&gt;</dt>
528 <dd>
529 <p>To support virtual hosting, an interpolated path template can be
530 used to dynamically construct alternate paths. The template
531 supports %H for the target hostname as supplied by the client but
532 converted to all lowercase, %CH for the canonical hostname,
533 %IP for the server&#8217;s IP address, %P for the port number,
534 and %D for the absolute path of the named repository.
535 After interpolation, the path is validated against the directory
536 list.</p>
537 </dd>
538 <dt class="hdlist1">--export-all</dt>
539 <dd>
540 <p>Allow pulling from all directories that look like Git repositories
541 (have the <em>objects</em> and <em>refs</em> subdirectories), even if they
542 do not have the <em>git-daemon-export-ok</em> file.</p>
543 </dd>
544 <dt class="hdlist1">--inetd</dt>
545 <dd>
546 <p>Have the server run as an inetd service. Implies --syslog (may be
547 overridden with <code>--log-destination=</code>).
548 Incompatible with --detach, --port, --listen, --user and --group
549 options.</p>
550 </dd>
551 <dt class="hdlist1">--listen=&lt;host-or-ipaddr&gt;</dt>
552 <dd>
553 <p>Listen on a specific IP address or hostname. IP addresses can
554 be either an IPv4 address or an IPv6 address if supported. If IPv6
555 is not supported, then --listen=&lt;hostname&gt; is also not supported and
556 --listen must be given an IPv4 address.
557 Can be given more than once.
558 Incompatible with <code>--inetd</code> option.</p>
559 </dd>
560 <dt class="hdlist1">--port=&lt;n&gt;</dt>
561 <dd>
562 <p>Listen on an alternative port. Incompatible with <code>--inetd</code> option.</p>
563 </dd>
564 <dt class="hdlist1">--init-timeout=&lt;n&gt;</dt>
565 <dd>
566 <p>Timeout (in seconds) between the moment the connection is established
567 and the client request is received (typically a rather low value, since
568 that should be basically immediate).</p>
569 </dd>
570 <dt class="hdlist1">--timeout=&lt;n&gt;</dt>
571 <dd>
572 <p>Timeout (in seconds) for specific client sub-requests. This includes
573 the time it takes for the server to process the sub-request and the
574 time spent waiting for the next client&#8217;s request.</p>
575 </dd>
576 <dt class="hdlist1">--max-connections=&lt;n&gt;</dt>
577 <dd>
578 <p>Maximum number of concurrent clients, defaults to 32. Set it to
579 zero for no limit.</p>
580 </dd>
581 <dt class="hdlist1">--syslog</dt>
582 <dd>
583 <p>Short for <code>--log-destination=syslog</code>.</p>
584 </dd>
585 <dt class="hdlist1">--log-destination=&lt;destination&gt;</dt>
586 <dd>
587 <p>Send log messages to the specified destination.
588 Note that this option does not imply --verbose,
589 thus by default only error conditions will be logged.
590 The &lt;destination&gt; must be one of:</p>
591 <div class="openblock">
592 <div class="content">
593 <div class="dlist">
594 <dl>
595 <dt class="hdlist1">stderr</dt>
596 <dd>
597 <p>Write to standard error.
598 Note that if <code>--detach</code> is specified,
599 the process disconnects from the real standard error,
600 making this destination effectively equivalent to <code>none</code>.</p>
601 </dd>
602 <dt class="hdlist1">syslog</dt>
603 <dd>
604 <p>Write to syslog, using the <code>git-daemon</code> identifier.</p>
605 </dd>
606 <dt class="hdlist1">none</dt>
607 <dd>
608 <p>Disable all logging.</p>
609 </dd>
610 </dl>
611 </div>
612 </div>
613 </div>
614 <div class="paragraph">
615 <p>The default destination is <code>syslog</code> if <code>--inetd</code> or <code>--detach</code> is specified,
616 otherwise <code>stderr</code>.</p>
617 </div>
618 </dd>
619 <dt class="hdlist1">--user-path</dt>
620 <dt class="hdlist1">--user-path=&lt;path&gt;</dt>
621 <dd>
622 <p>Allow ~user notation to be used in requests. When
623 specified with no parameter, a request to
624 git://host/~alice/foo is taken as a request to access
625 <em>foo</em> repository in the home directory of user <code>alice</code>.
626 If <code>--user-path=&lt;path&gt;</code> is specified, the same request is
627 taken as a request to access <code>&lt;path&gt;/foo</code> repository in
628 the home directory of user <code>alice</code>.</p>
629 </dd>
630 <dt class="hdlist1">--verbose</dt>
631 <dd>
632 <p>Log details about the incoming connections and requested files.</p>
633 </dd>
634 <dt class="hdlist1">--reuseaddr</dt>
635 <dd>
636 <p>Use SO_REUSEADDR when binding the listening socket.
637 This allows the server to restart without waiting for
638 old connections to time out.</p>
639 </dd>
640 <dt class="hdlist1">--detach</dt>
641 <dd>
642 <p>Detach from the shell. Implies --syslog.</p>
643 </dd>
644 <dt class="hdlist1">--pid-file=&lt;file&gt;</dt>
645 <dd>
646 <p>Save the process id in <em>file</em>. Ignored when the daemon
647 is run under <code>--inetd</code>.</p>
648 </dd>
649 <dt class="hdlist1">--user=&lt;user&gt;</dt>
650 <dt class="hdlist1">--group=&lt;group&gt;</dt>
651 <dd>
652 <p>Change daemon&#8217;s uid and gid before entering the service loop.
653 When only <code>--user</code> is given without <code>--group</code>, the
654 primary group ID for the user is used. The values of
655 the option are given to <code>getpwnam(3)</code> and <code>getgrnam(3)</code>
656 and numeric IDs are not supported.</p>
657 <div class="paragraph">
658 <p>Giving these options is an error when used with <code>--inetd</code>; use
659 the facility of inet daemon to achieve the same before spawning
660 <em>git daemon</em> if needed.</p>
661 </div>
662 <div class="paragraph">
663 <p>Like many programs that switch user id, the daemon does not reset
664 environment variables such as <code>$HOME</code> when it runs git programs,
665 e.g. <code>upload-pack</code> and <code>receive-pack</code>. When using this option, you
666 may also want to set and export <code>HOME</code> to point at the home
667 directory of <code>&lt;user&gt;</code> before starting the daemon, and make sure any
668 Git configuration files in that directory are readable by <code>&lt;user&gt;</code>.</p>
669 </div>
670 </dd>
671 <dt class="hdlist1">--enable=&lt;service&gt;</dt>
672 <dt class="hdlist1">--disable=&lt;service&gt;</dt>
673 <dd>
674 <p>Enable/disable the service site-wide per default. Note
675 that a service disabled site-wide can still be enabled
676 per repository if it is marked overridable and the
677 repository enables the service with a configuration
678 item.</p>
679 </dd>
680 <dt class="hdlist1">--allow-override=&lt;service&gt;</dt>
681 <dt class="hdlist1">--forbid-override=&lt;service&gt;</dt>
682 <dd>
683 <p>Allow/forbid overriding the site-wide default with per
684 repository configuration. By default, all the services
685 may be overridden.</p>
686 </dd>
687 <dt class="hdlist1">--[no-]informative-errors</dt>
688 <dd>
689 <p>When informative errors are turned on, git-daemon will report
690 more verbose errors to the client, differentiating conditions
691 like "no such repository" from "repository not exported". This
692 is more convenient for clients, but may leak information about
693 the existence of unexported repositories. When informative
694 errors are not enabled, all errors report "access denied" to the
695 client. The default is --no-informative-errors.</p>
696 </dd>
697 <dt class="hdlist1">--access-hook=&lt;path&gt;</dt>
698 <dd>
699 <p>Every time a client connects, first run an external command
700 specified by the &lt;path&gt; with service name (e.g. "upload-pack"),
701 path to the repository, hostname (%H), canonical hostname
702 (%CH), IP address (%IP), and TCP port (%P) as its command-line
703 arguments. The external command can decide to decline the
704 service by exiting with a non-zero status (or to allow it by
705 exiting with a zero status). It can also look at the $REMOTE_ADDR
706 and <code>$REMOTE_PORT</code> environment variables to learn about the
707 requestor when making this decision.</p>
708 <div class="paragraph">
709 <p>The external command can optionally write a single line to its
710 standard output to be sent to the requestor as an error message when
711 it declines the service.</p>
712 </div>
713 </dd>
714 <dt class="hdlist1">&lt;directory&gt;</dt>
715 <dd>
716 <p>The remaining arguments provide a list of directories. If any
717 directories are specified, then the <code>git-daemon</code> process will
718 serve a requested directory only if it is contained in one of
719 these directories. If <code>--strict-paths</code> is specified, then the
720 requested directory must match one of these directories exactly.</p>
721 </dd>
722 </dl>
723 </div>
724 </div>
725 </div>
726 <div class="sect1">
727 <h2 id="_services">SERVICES</h2>
728 <div class="sectionbody">
729 <div class="paragraph">
730 <p>These services can be globally enabled/disabled using the
731 command-line options of this command. If finer-grained
732 control is desired (e.g. to allow <em>git archive</em> to be run
733 against only in a few selected repositories the daemon serves),
734 the per-repository configuration file can be used to enable or
735 disable them.</p>
736 </div>
737 <div class="dlist">
738 <dl>
739 <dt class="hdlist1">upload-pack</dt>
740 <dd>
741 <p>This serves <em>git fetch-pack</em> and <em>git ls-remote</em>
742 clients. It is enabled by default, but a repository can
743 disable it by setting <code>daemon.uploadpack</code> configuration
744 item to <code>false</code>.</p>
745 </dd>
746 <dt class="hdlist1">upload-archive</dt>
747 <dd>
748 <p>This serves <em>git archive --remote</em>. It is disabled by
749 default, but a repository can enable it by setting
750 <code>daemon.uploadarch</code> configuration item to <code>true</code>.</p>
751 </dd>
752 <dt class="hdlist1">receive-pack</dt>
753 <dd>
754 <p>This serves <em>git send-pack</em> clients, allowing anonymous
755 push. It is disabled by default, as there is <em>no</em>
756 authentication in the protocol (in other words, anybody
757 can push anything into the repository, including removal
758 of refs). This is solely meant for a closed LAN setting
759 where everybody is friendly. This service can be
760 enabled by setting <code>daemon.receivepack</code> configuration item to
761 <code>true</code>.</p>
762 </dd>
763 </dl>
764 </div>
765 </div>
766 </div>
767 <div class="sect1">
768 <h2 id="_examples">EXAMPLES</h2>
769 <div class="sectionbody">
770 <div class="dlist">
771 <dl>
772 <dt class="hdlist1">We assume the following in /etc/services</dt>
773 <dd>
774 <div class="listingblock">
775 <div class="content">
776 <pre>$ grep 9418 /etc/services
777 git 9418/tcp # Git Version Control System</pre>
778 </div>
779 </div>
780 </dd>
781 <dt class="hdlist1"><em>git daemon</em> as inetd server</dt>
782 <dd>
783 <p>To set up <em>git daemon</em> as an inetd service that handles any
784 repository within <code>/pub/foo</code> or <code>/pub/bar</code>, place an entry like
785 the following into <code>/etc/inetd</code> all on one line:</p>
786 <div class="listingblock">
787 <div class="content">
788 <pre> git stream tcp nowait nobody /usr/bin/git
789 git daemon --inetd --verbose --export-all
790 /pub/foo /pub/bar</pre>
791 </div>
792 </div>
793 </dd>
794 <dt class="hdlist1"><em>git daemon</em> as inetd server for virtual hosts</dt>
795 <dd>
796 <p>To set up <em>git daemon</em> as an inetd service that handles
797 repositories for different virtual hosts, <code>www.example.com</code>
798 and <code>www.example.org</code>, place an entry like the following into
799 <code>/etc/inetd</code> all on one line:</p>
800 <div class="listingblock">
801 <div class="content">
802 <pre> git stream tcp nowait nobody /usr/bin/git
803 git daemon --inetd --verbose --export-all
804 --interpolated-path=/pub/%H%D
805 /pub/www.example.org/software
806 /pub/www.example.com/software
807 /software</pre>
808 </div>
809 </div>
810 <div class="paragraph">
811 <p>In this example, the root-level directory <code>/pub</code> will contain
812 a subdirectory for each virtual host name supported.
813 Further, both hosts advertise repositories simply as
814 <code>git://www.example.com/software/repo.git</code>. For pre-1.4.0
815 clients, a symlink from <code>/software</code> into the appropriate
816 default repository could be made as well.</p>
817 </div>
818 </dd>
819 <dt class="hdlist1"><em>git daemon</em> as regular daemon for virtual hosts</dt>
820 <dd>
821 <p>To set up <em>git daemon</em> as a regular, non-inetd service that
822 handles repositories for multiple virtual hosts based on
823 their IP addresses, start the daemon like this:</p>
824 <div class="listingblock">
825 <div class="content">
826 <pre> git daemon --verbose --export-all
827 --interpolated-path=/pub/%IP/%D
828 /pub/192.168.1.200/software
829 /pub/10.10.220.23/software</pre>
830 </div>
831 </div>
832 <div class="paragraph">
833 <p>In this example, the root-level directory <code>/pub</code> will contain
834 a subdirectory for each virtual host IP address supported.
835 Repositories can still be accessed by hostname though, assuming
836 they correspond to these IP addresses.</p>
837 </div>
838 </dd>
839 <dt class="hdlist1">selectively enable/disable services per repository</dt>
840 <dd>
841 <p>To enable <em>git archive --remote</em> and disable <em>git fetch</em> against
842 a repository, have the following in the configuration file in the
843 repository (that is the file <em>config</em> next to <code>HEAD</code>, <em>refs</em> and
844 <em>objects</em>).</p>
845 <div class="listingblock">
846 <div class="content">
847 <pre> [daemon]
848 uploadpack = false
849 uploadarch = true</pre>
850 </div>
851 </div>
852 </dd>
853 </dl>
854 </div>
855 </div>
856 </div>
857 <div class="sect1">
858 <h2 id="_environment">ENVIRONMENT</h2>
859 <div class="sectionbody">
860 <div class="paragraph">
861 <p><em>git daemon</em> will set REMOTE_ADDR to the IP address of the client
862 that connected to it, if the IP address is available. REMOTE_ADDR will
863 be available in the environment of hooks called when
864 services are performed.</p>
865 </div>
866 </div>
867 </div>
868 <div class="sect1">
869 <h2 id="_git">GIT</h2>
870 <div class="sectionbody">
871 <div class="paragraph">
872 <p>Part of the <a href="git.html">git(1)</a> suite</p>
873 </div>
874 </div>
875 </div>
876 </div>
877 <div id="footer">
878 <div id="footer-text">
879 Last updated 2024-02-08 15:45:59 -0800
880 </div>
881 </div>
882 </body>
883 </html>