blob: 2dd4697a692560621e05a9e44095dd455b8bc32a [file] [log] [blame]
Junio C Hamanob96f40a2024-08-01 00:57:251<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
3<head>
4<meta charset="UTF-8"/>
5<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
6<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
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"; */
14html{font-family:sans-serif;-webkit-text-size-adjust:100%}
15a{background:none}
16a:focus{outline:thin dotted}
17a:active,a:hover{outline:0}
18h1{font-size:2em;margin:.67em 0}
19b,strong{font-weight:bold}
20abbr{font-size:.9em}
21abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
22dfn{font-style:italic}
23hr{height:0}
24mark{background:#ff0;color:#000}
25code,kbd,pre,samp{font-family:monospace;font-size:1em}
26pre{white-space:pre-wrap}
27q{quotes:"\201C" "\201D" "\2018" "\2019"}
28small{font-size:80%}
29sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
30sup{top:-.5em}
31sub{bottom:-.25em}
32img{border:0}
33svg:not(:root){overflow:hidden}
34figure{margin:0}
35audio,video{display:inline-block}
36audio:not([controls]){display:none;height:0}
37fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
38legend{border:0;padding:0}
39button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
40button,input{line-height:normal}
41button,select{text-transform:none}
42button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
43button[disabled],html input[disabled]{cursor:default}
44input[type=checkbox],input[type=radio]{padding:0}
45button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
46textarea{overflow:auto;vertical-align:top}
47table{border-collapse:collapse;border-spacing:0}
48*,::before,::after{box-sizing:border-box}
49html,body{font-size:100%}
50body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
51a:hover{cursor:pointer}
52img,object,embed{max-width:100%;height:auto}
53object,embed{height:100%}
54img{-ms-interpolation-mode:bicubic}
55.left{float:left!important}
56.right{float:right!important}
57.text-left{text-align:left!important}
58.text-right{text-align:right!important}
59.text-center{text-align:center!important}
60.text-justify{text-align:justify!important}
61.hide{display:none}
62img,object,svg{display:inline-block;vertical-align:middle}
63textarea{height:auto;min-height:50px}
64select{width:100%}
65.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
66div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
67a{color:#2156a5;text-decoration:underline;line-height:inherit}
68a:hover,a:focus{color:#1d4b8f}
69a img{border:0}
70p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
71p aside{font-size:.875em;line-height:1.35;font-style:italic}
72h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
73h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
74h1{font-size:2.125em}
75h2{font-size:1.6875em}
76h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
77h4,h5{font-size:1.125em}
78h6{font-size:1em}
79hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
80em,i{font-style:italic;line-height:inherit}
81strong,b{font-weight:bold;line-height:inherit}
82small{font-size:60%;line-height:inherit}
83code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
84ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
85ul,ol{margin-left:1.5em}
86ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
87ul.circle{list-style-type:circle}
88ul.disc{list-style-type:disc}
89ul.square{list-style-type:square}
90ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
91ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
92dl dt{margin-bottom:.3125em;font-weight:bold}
93dl dd{margin-bottom:1.25em}
94blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
95blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
96@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
97h1{font-size:2.75em}
98h2{font-size:2.3125em}
99h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
100h4{font-size:1.4375em}}
101table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
102table thead,table tfoot{background:#f7f8f7}
103table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
104table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
105table tr.even,table tr.alt{background:#f8f8f7}
106table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
107h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
108h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
109.center{margin-left:auto;margin-right:auto}
110.stretch{width:100%}
111.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
112.clearfix::after,.float-group::after{clear:both}
113:not(pre).nobreak{word-wrap:normal}
114:not(pre).nowrap{white-space:nowrap}
115:not(pre).pre-wrap{white-space:pre-wrap}
116:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
117pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
118pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
119pre>code{display:block}
120pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
121em em{font-style:normal}
122strong strong{font-weight:400}
123.keyseq{color:rgba(51,51,51,.8)}
124kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
125.keyseq kbd:first-child{margin-left:0}
126.keyseq kbd:last-child{margin-right:0}
127.menuseq,.menuref{color:#000}
128.menuseq b:not(.caret),.menuref{font-weight:inherit}
129.menuseq{word-spacing:-.02em}
130.menuseq b.caret{font-size:1.25em;line-height:.8}
131.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
132b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
133b.button::before{content:"[";padding:0 3px 0 2px}
134b.button::after{content:"]";padding:0 2px 0 3px}
135p a>code:hover{color:rgba(0,0,0,.9)}
136#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
137#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
138#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
139#content{margin-top:1.25em}
140#content::before{content:none}
141#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
142#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
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}
164body.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}
170body.toc2.toc-right{padding-left:0;padding-right:15em}
171body.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}
177body.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}
194details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
195details{margin-left:1.25rem}
196details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
197details>summary::-webkit-details-marker{display:none}
198details>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%)}
199details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
200details>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}
202table.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}
229pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
230pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
231pre.prettyprint li code[data-lang]::before{opacity:1}
232pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
233table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
234table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
235table.linenotable td.code{padding-left:.75em}
236table.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}
237pre.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}
260p.tableblock:last-child{margin-bottom:0}
261td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
262td.tableblock>.content>:last-child{margin-bottom:-1.25em}
263table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
264table.grid-all>*>tr>*{border-width:1px}
265table.grid-cols>*>tr>*{border-width:0 1px}
266table.grid-rows>*>tr>*{border-width:1px 0}
267table.frame-all{border-width:1px}
268table.frame-ends{border-width:1px 0}
269table.frame-sides{border-width:0 1px}
270table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
271table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
272table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
273table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
274table.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}
275th.halign-left,td.halign-left{text-align:left}
276th.halign-right,td.halign-right{text-align:right}
277th.halign-center,td.halign-center{text-align:center}
278th.valign-top,td.valign-top{vertical-align:top}
279th.valign-bottom,td.valign-bottom{vertical-align:bottom}
280th.valign-middle,td.valign-middle{vertical-align:middle}
281table thead th,table tfoot th{font-weight:bold}
282tbody tr th{background:#f7f8f7}
283tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
284p.tableblock>code:only-child{background:none;padding:0}
285p.tableblock{font-size:1em}
286ol{margin-left:1.75em}
287ul li ol{margin-left:1.5em}
288dl dd{margin-left:1.125em}
289dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
290li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
291ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
292ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
293ul.unstyled,ol.unstyled{margin-left:0}
294li>p:empty:only-child::before{content:"";display:inline-block}
295ul.checklist>li>p:first-child{margin-left:-1em}
296ul.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}
297ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
298ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
299ul.inline>li{margin-left:1.25em}
300.unstyled dl dt{font-weight:400;font-style:normal}
301ol.arabic{list-style-type:decimal}
302ol.decimal{list-style-type:decimal-leading-zero}
303ol.loweralpha{list-style-type:lower-alpha}
304ol.upperalpha{list-style-type:upper-alpha}
305ol.lowerroman{list-style-type:lower-roman}
306ol.upperroman{list-style-type:upper-roman}
307ol.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}
310td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
311td.hdlist1{font-weight:bold;padding-bottom:1.25em}
312td.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}
326a.image{text-decoration:none;display:inline-block}
327a.image object{pointer-events:none}
328sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
329sup.footnote a,sup.footnoteref a{text-decoration:none}
330sup.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}
337div.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}
375span.icon>.fa{cursor:default}
376a 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)}
387pre .conum[data-value]{position:relative;top:-.125em}
388b.conum *{color:inherit!important}
389.conum:not([data-value]):empty{display:none}
390dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
391h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
392p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
393p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
394p{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}
400html{font-size:80%}
401a{color:inherit!important;text-decoration:underline!important}
402a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
403a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
404abbr[title]{border-bottom:1px dotted}
405abbr[title]::after{content:" (" attr(title) ")"}
406pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
407thead{display:table-header-group}
408svg{max-width:100%}
409p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
410h2,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}
414body.book #header{text-align:center}
415body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
416body.book #header .details{border:0!important;display:block;padding:0!important}
417body.book #header .details span:first-child{margin-left:0!important}
418body.book #header .details br{display:block}
419body.book #header .details br+span::before{content:none!important}
420body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
421body.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>
436pre>code {
437 display: inline;
438}
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"
476aka 9418. It waits for a connection asking for a service, and will serve
477that 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
481it will refuse to export any Git directory that hasn&#8217;t explicitly been marked
482for export this way (unless the <code>--export-all</code> parameter is specified). If you
483pass some directory paths as <em>git daemon</em> arguments, the offers are limited to
484repositories 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
489from <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
493Git 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
510directory 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.
515This 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
518as <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.
524This is useful for switching to --base-path usage, while still
525allowing 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
530used to dynamically construct alternate paths. The template
531supports %H for the target hostname as supplied by the client but
532converted to all lowercase, %CH for the canonical hostname,
533%IP for the server&#8217;s IP address, %P for the port number,
534and %D for the absolute path of the named repository.
535After interpolation, the path is validated against the directory
536list.</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
542do 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
547overridden with <code>--log-destination=</code>).
548Incompatible with --detach, --port, --listen, --user and --group
549options.</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
554be either an IPv4 address or an IPv6 address if supported. If IPv6
555is not supported, then --listen=&lt;hostname&gt; is also not supported and
556--listen must be given an IPv4 address.
557Can be given more than once.
558Incompatible 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
567and the client request is received (typically a rather low value, since
568that 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
573the time it takes for the server to process the sub-request and the
574time 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
579zero 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.
588Note that this option does not imply --verbose,
589thus by default only error conditions will be logged.
590The &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.
598Note that if <code>--detach</code> is specified,
599the process disconnects from the real standard error,
600making 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,
616otherwise <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
623specified with no parameter, a request to
624git://host/~alice/foo is taken as a request to access
625<em>foo</em> repository in the home directory of user <code>alice</code>.
626If <code>--user-path=&lt;path&gt;</code> is specified, the same request is
627taken as a request to access <code>&lt;path&gt;/foo</code> repository in
628the 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.
637This allows the server to restart without waiting for
638old 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
647is 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.
653When only <code>--user</code> is given without <code>--group</code>, the
654primary group ID for the user is used. The values of
655the option are given to <code>getpwnam(3)</code> and <code>getgrnam(3)</code>
656and 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
659the 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
664environment variables such as <code>$HOME</code> when it runs git programs,
665e.g. <code>upload-pack</code> and <code>receive-pack</code>. When using this option, you
666may also want to set and export <code>HOME</code> to point at the home
667directory of <code>&lt;user&gt;</code> before starting the daemon, and make sure any
668Git 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
675that a service disabled site-wide can still be enabled
676per repository if it is marked overridable and the
677repository enables the service with a configuration
678item.</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
684repository configuration. By default, all the services
685may 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
690more verbose errors to the client, differentiating conditions
691like "no such repository" from "repository not exported". This
692is more convenient for clients, but may leak information about
693the existence of unexported repositories. When informative
694errors are not enabled, all errors report "access denied" to the
695client. 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
700specified by the &lt;path&gt; with service name (e.g. "upload-pack"),
701path to the repository, hostname (%H), canonical hostname
702(%CH), IP address (%IP), and TCP port (%P) as its command-line
703arguments. The external command can decide to decline the
704service by exiting with a non-zero status (or to allow it by
705exiting with a zero status). It can also look at the $REMOTE_ADDR
706and <code>$REMOTE_PORT</code> environment variables to learn about the
707requestor when making this decision.</p>
708<div class="paragraph">
709<p>The external command can optionally write a single line to its
710standard output to be sent to the requestor as an error message when
711it 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
717directories are specified, then the <code>git-daemon</code> process will
718serve a requested directory only if it is contained in one of
719these directories. If <code>--strict-paths</code> is specified, then the
720requested 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
731command-line options of this command. If finer-grained
732control is desired (e.g. to allow <em>git archive</em> to be run
733against only in a few selected repositories the daemon serves),
734the per-repository configuration file can be used to enable or
735disable 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>
742clients. It is enabled by default, but a repository can
743disable it by setting <code>daemon.uploadpack</code> configuration
744item 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
749default, 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
755push. It is disabled by default, as there is <em>no</em>
756authentication in the protocol (in other words, anybody
757can push anything into the repository, including removal
758of refs). This is solely meant for a closed LAN setting
759where everybody is friendly. This service can be
760enabled 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
777git 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
784repository within <code>/pub/foo</code> or <code>/pub/bar</code>, place an entry like
785the 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
797repositories for different virtual hosts, <code>www.example.com</code>
798and <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
812a subdirectory for each virtual host name supported.
813Further, both hosts advertise repositories simply as
814<code>git://www.example.com/software/repo.git</code>. For pre-1.4.0
815clients, a symlink from <code>/software</code> into the appropriate
816default 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
822handles repositories for multiple virtual hosts based on
823their 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
834a subdirectory for each virtual host IP address supported.
835Repositories can still be accessed by hostname though, assuming
836they 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
842a repository, have the following in the configuration file in the
843repository (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
862that connected to it, if the IP address is available. REMOTE_ADDR will
863be available in the environment of hooks called when
864services 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">
879Last updated 2024-02-08 15:45:59 -0800
880</div>
881</div>
882</body>
883</html>