2 <html xmlns=
"http://www.w3.org/1999/xhtml" lang=
"en">
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>gitweb.conf(
5)
</title>
9 <link rel=
"stylesheet" href=
"https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"/>
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%}
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}
21 abbr[title]{cursor:help;border-bottom:
1px dotted #dddddf;text-decoration:none}
22 dfn{font-style:italic}
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"}
29 sub,sup{font-size:
75%;line-height:
0;position:relative;vertical-align:baseline}
33 svg:not(:root){overflow:hidden}
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}
62 img,object,svg{display:inline-block;vertical-align:middle}
63 textarea{height:auto;min-height:
50px}
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}
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}
75 h2{font-size:
1.6875em}
76 h3,#toctitle,.sidebarblock
>.content
>.title{font-size:
1.375em}
77 h4,h5{font-size:
1.125em}
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}
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}
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}
344 .aqua-background{background:#
00fafa}
346 .black-background{background:#
000}
348 .blue-background{background:#
0000fa}
349 .fuchsia{color:#bf00bf}
350 .fuchsia-background{background:#fa00fa}
352 .gray-background{background:#
7d7d7d}
353 .green{color:#
006000}
354 .green-background{background:#
007d00}
356 .lime-background{background:#
00fa00}
357 .maroon{color:#
600000}
358 .maroon-background{background:#
7d0000}
360 .navy-background{background:#
00007d}
361 .olive{color:#
606000}
362 .olive-background{background:#
7d7d00}
363 .purple{color:#
600060}
364 .purple-background{background:#
7d007d}
366 .red-background{background:#fa0000}
367 .silver{color:#
909090}
368 .silver-background{background:#bcbcbc}
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}
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}
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}}
441 <body class=
"manpage">
443 <h1>gitweb.conf(
5) Manual Page
</h1>
444 <h2 id=
"_name">NAME
</h2>
445 <div class=
"sectionbody">
446 <p>gitweb.conf - Gitweb (Git web interface) configuration file
</p>
451 <h2 id=
"_synopsis">SYNOPSIS
</h2>
452 <div class=
"sectionbody">
453 <div class=
"paragraph">
454 <p>/etc/gitweb.conf, /etc/gitweb-common.conf, $GITWEBDIR/gitweb_config.perl
</p>
459 <h2 id=
"_description">DESCRIPTION
</h2>
460 <div class=
"sectionbody">
461 <div class=
"paragraph">
462 <p>The gitweb CGI script for viewing Git repositories over the web uses a
463 perl script fragment as its configuration file. You can set variables
464 using
"<code>our</code> <code>$variable</code> <code>=</code> <code>value</code>"; text from a
"#" character until the
465 end of a line is ignored. See
<strong>perlsyn
</strong>(
1) for details.
</p>
467 <div class=
"paragraph">
470 <div class=
"listingblock">
471 <div class=
"content">
472 <pre># gitweb configuration file for http://git.example.org
474 our $projectroot =
"/srv/git"; # FHS recommendation
475 our $site_name = 'Example.org
>> Repos';
</pre>
478 <div class=
"paragraph">
479 <p>The configuration file is used to override the default settings that
480 were built into gitweb at the time the
<em>gitweb.cgi
</em> script was generated.
</p>
482 <div class=
"paragraph">
483 <p>While one could just alter the configuration settings in the gitweb
484 CGI itself, those changes would be lost upon upgrade. Configuration
485 settings might also be placed into a file in the same directory as the
486 CGI script with the default name
<em>gitweb_config.perl
</em> — allowing
487 one to have multiple gitweb instances with different configurations by
488 the use of symlinks.
</p>
490 <div class=
"paragraph">
491 <p>Note that some configuration can be controlled on per-repository rather than
492 gitweb-wide basis: see
"Per-repository gitweb configuration" subsection on
493 <a href=
"gitweb.html">gitweb(
1)
</a> manpage.
</p>
498 <h2 id=
"_discussion">DISCUSSION
</h2>
499 <div class=
"sectionbody">
500 <div class=
"paragraph">
501 <p>Gitweb reads configuration data from the following sources in the
507 <p>built-in values (some set during build stage),
</p>
510 <p>common system-wide configuration file (defaults to
511 <code>/etc/gitweb-common.conf
</code>),
</p>
514 <p>either per-instance configuration file (defaults to
<em>gitweb_config.perl
</em>
515 in the same directory as the installed gitweb), or if it does not exist
516 then fallback system-wide configuration file (defaults to
<code>/etc/gitweb.conf
</code>).
</p>
520 <div class=
"paragraph">
521 <p>Values obtained in later configuration files override values obtained earlier
522 in the above sequence.
</p>
524 <div class=
"paragraph">
525 <p>Locations of the common system-wide configuration file, the fallback
526 system-wide configuration file and the per-instance configuration file
527 are defined at compile time using build-time Makefile configuration
528 variables, respectively
<code>GITWEB_CONFIG_COMMON
</code>,
<code>GITWEB_CONFIG_SYSTEM
</code>
529 and
<code>GITWEB_CONFIG
</code>.
</p>
531 <div class=
"paragraph">
532 <p>You can also override locations of gitweb configuration files during
533 runtime by setting the following environment variables:
534 <code>GITWEB_CONFIG_COMMON
</code>,
<code>GITWEB_CONFIG_SYSTEM
</code> and
<code>GITWEB_CONFIG
</code>
535 to a non-empty value.
</p>
537 <div class=
"paragraph">
538 <p>The syntax of the configuration files is that of Perl, since these files are
539 handled by sourcing them as fragments of Perl code (the language that
540 gitweb itself is written in). Variables are typically set using the
541 <code>our
</code> qualifier (as in
"<code>our</code> <code>$variable</code> <code>=</code> <em><value></em>;") to avoid syntax
542 errors if a new version of gitweb no longer uses a variable and therefore
543 stops declaring it.
</p>
545 <div class=
"paragraph">
546 <p>You can include other configuration file using read_config_file()
547 subroutine. For example, one might want to put gitweb configuration
548 related to access control for viewing repositories via Gitolite (one
549 of Git repository management tools) in a separate file, e.g. in
550 <code>/etc/gitweb-gitolite.conf
</code>. To include it, put
</p>
552 <div class=
"listingblock">
553 <div class=
"content">
554 <pre>read_config_file(
"/etc/gitweb-gitolite.conf");
</pre>
557 <div class=
"paragraph">
558 <p>somewhere in gitweb configuration file used, e.g. in per-installation
559 gitweb configuration file. Note that read_config_file() checks itself
560 that the file it reads exists, and does nothing if it is not found.
561 It also handles errors in included file.
</p>
563 <div class=
"paragraph">
564 <p>The default configuration with no configuration file at all may work
565 perfectly well for some installations. Still, a configuration file is
566 useful for customizing or tweaking the behavior of gitweb in many ways, and
567 some optional features will not be present unless explicitly enabled using
568 the configurable %features variable (see also
"Configuring gitweb
569 features" section below).
</p>
574 <h2 id=
"_configuration_variables">CONFIGURATION VARIABLES
</h2>
575 <div class=
"sectionbody">
576 <div class=
"paragraph">
577 <p>Some configuration variables have their default values (embedded in the CGI
578 script) set during building gitweb
 — if that is the case, this fact is put
579 in their description. See gitweb
’s
<em>INSTALL
</em> file for instructions on building
580 and installing gitweb.
</p>
583 <h3 id=
"_location_of_repositories">Location of repositories
</h3>
584 <div class=
"paragraph">
585 <p>The configuration variables described below control how gitweb finds
586 Git repositories, and how repositories are displayed and accessed.
</p>
588 <div class=
"paragraph">
589 <p>See also
"Repositories" and later subsections in
<a href=
"gitweb.html">gitweb(
1)
</a> manpage.
</p>
593 <dt class=
"hdlist1">$projectroot
</dt>
595 <p>Absolute filesystem path which will be prepended to project path;
596 the path to repository is
<code>$projectroot/$project
</code>. Set to
597 <code>$GITWEB_PROJECTROOT
</code> during installation. This variable has to be
598 set correctly for gitweb to find repositories.
</p>
599 <div class=
"paragraph">
600 <p>For example, if
<code>$projectroot
</code> is set to
"/srv/git" by putting the following
601 in gitweb config file:
</p>
603 <div class=
"listingblock">
604 <div class=
"content">
605 <pre>our $projectroot =
"/srv/git";
</pre>
608 <div class=
"paragraph">
611 <div class=
"listingblock">
612 <div class=
"content">
613 <pre>http://git.example.com/gitweb.cgi?p=foo/bar.git
</pre>
616 <div class=
"paragraph">
617 <p>and its path_info based equivalent
</p>
619 <div class=
"listingblock">
620 <div class=
"content">
621 <pre>http://git.example.com/gitweb.cgi/foo/bar.git
</pre>
624 <div class=
"paragraph">
625 <p>will map to the path
<code>/srv/git/foo/bar.git
</code> on the filesystem.
</p>
628 <dt class=
"hdlist1">$projects_list
</dt>
630 <p>Name of a plain text file listing projects, or a name of directory
631 to be scanned for projects.
</p>
632 <div class=
"paragraph">
633 <p>Project list files should list one project per line, with each line
634 having the following format
</p>
636 <div class=
"listingblock">
637 <div class=
"content">
638 <pre><URI-encoded filesystem path to repository
> SP
<URI-encoded repository owner
></pre>
641 <div class=
"paragraph">
642 <p>The default value of this variable is determined by the
<code>GITWEB_LIST
</code>
643 makefile variable at installation time. If this variable is empty, gitweb
644 will fall back to scanning the
<code>$projectroot
</code> directory for repositories.
</p>
647 <dt class=
"hdlist1">$project_maxdepth
</dt>
649 <p>If
<code>$projects_list
</code> variable is unset, gitweb will recursively
650 scan filesystem for Git repositories. The
<code>$project_maxdepth
</code>
651 is used to limit traversing depth, relative to
<code>$projectroot
</code>
652 (starting point); it means that directories which are further
653 from
<code>$projectroot
</code> than
<code>$project_maxdepth
</code> will be skipped.
</p>
654 <div class=
"paragraph">
655 <p>It is purely performance optimization, originally intended for MacOS X,
656 where recursive directory traversal is slow. Gitweb follows symbolic
657 links, but it detects cycles, ignoring any duplicate files and directories.
</p>
659 <div class=
"paragraph">
660 <p>The default value of this variable is determined by the build-time
661 configuration variable
<code>GITWEB_PROJECT_MAXDEPTH
</code>, which defaults to
665 <dt class=
"hdlist1">$export_ok
</dt>
667 <p>Show repository only if this file exists (in repository). Only
668 effective if this variable evaluates to true. Can be set when
669 building gitweb by setting
<code>GITWEB_EXPORT_OK
</code>. This path is
670 relative to
<code>GIT_DIR
</code>. git-daemon[
1] uses
<em>git-daemon-export-ok
</em>,
671 unless started with
<code>--export-all
</code>. By default this variable is
672 not set, which means that this feature is turned off.
</p>
674 <dt class=
"hdlist1">$export_auth_hook
</dt>
676 <p>Function used to determine which repositories should be shown.
677 This subroutine should take one parameter, the full path to
678 a project, and if it returns true, that project will be included
679 in the projects list and can be accessed through gitweb as long
680 as it fulfills the other requirements described by $export_ok,
681 $projects_list, and $projects_maxdepth. Example:
</p>
682 <div class=
"listingblock">
683 <div class=
"content">
684 <pre>our $export_auth_hook = sub { return -e
"$_[0]/git-daemon-export-ok"; };
</pre>
687 <div class=
"paragraph">
688 <p>though the above might be done by using
<code>$export_ok
</code> instead
</p>
690 <div class=
"listingblock">
691 <div class=
"content">
692 <pre>our $export_ok =
"git-daemon-export-ok";
</pre>
695 <div class=
"paragraph">
696 <p>If not set (default), it means that this feature is disabled.
</p>
698 <div class=
"paragraph">
699 <p>See also more involved example in
"Controlling access to Git repositories"
700 subsection on
<a href=
"gitweb.html">gitweb(
1)
</a> manpage.
</p>
703 <dt class=
"hdlist1">$strict_export
</dt>
705 <p>Only allow viewing of repositories also shown on the overview page.
706 This for example makes
<code>$export_ok
</code> file decide if repository is
707 available and not only if it is shown. If
<code>$projects_list
</code> points to
708 file with list of project, only those repositories listed would be
709 available for gitweb. Can be set during building gitweb via
710 <code>GITWEB_STRICT_EXPORT
</code>. By default this variable is not set, which
711 means that you can directly access those repositories that are hidden
712 from projects list page (e.g. the are not listed in the $projects_list
719 <h3 id=
"_finding_files">Finding files
</h3>
720 <div class=
"paragraph">
721 <p>The following configuration variables tell gitweb where to find files.
722 The values of these variables are paths on the filesystem.
</p>
726 <dt class=
"hdlist1">$GIT
</dt>
728 <p>Core git executable to use. By default set to
<code>$GIT_BINDIR/git
</code>, which
729 in turn is by default set to
<code>$
</code>(
<code>bindir
</code>)
<code>/git
</code>. If you use Git installed
730 from a binary package, you should usually set this to
"/usr/bin/git".
731 This can just be
"git" if your web server has a sensible PATH; from
732 security point of view it is better to use absolute path to git binary.
733 If you have multiple Git versions installed it can be used to choose
734 which one to use. Must be (correctly) set for gitweb to be able to
737 <dt class=
"hdlist1">$mimetypes_file
</dt>
739 <p>File to use for (filename extension based) guessing of MIME types before
740 trying
<code>/etc/mime.types
</code>.
<strong>NOTE
</strong> that this path, if relative, is taken
741 as relative to the current Git repository, not to CGI script. If unset,
742 only
<code>/etc/mime.types
</code> is used (if present on filesystem). If no mimetypes
743 file is found, mimetype guessing based on extension of file is disabled.
744 Unset by default.
</p>
746 <dt class=
"hdlist1">$highlight_bin
</dt>
748 <p>Path to the highlight executable to use (it must be the one from
749 <a href=
"http://andre-simon.de/zip/download.php" class=
"bare">http://andre-simon.de/zip/download.php
</a> due to assumptions about parameters and output).
750 By default set to
<em>highlight
</em>; set it to full path to highlight
751 executable if it is not installed on your web server
’s PATH.
752 Note that
<em>highlight
</em> feature must be set for gitweb to actually
753 use syntax highlighting.
</p>
754 <div class=
"paragraph">
755 <p><strong>NOTE
</strong>: for a file to be highlighted, its syntax type must be detected
756 and that syntax must be supported by
"highlight". The default syntax
757 detection is minimal, and there are many supported syntax types with no
758 detection by default. There are three options for adding syntax
759 detection. The first and second priority are %highlight_basename and
760 %highlight_ext, which detect based on basename (the full filename, for
761 example
"Makefile") and extension (for example
"sh"). The keys of these
762 hashes are the basename and extension, respectively, and the value for a
763 given key is the name of the syntax to be passed via
<code>--syntax
</code> <em><syntax
></em>
764 to
"highlight". The last priority is the
"highlight" configuration of
765 <code>Shebang
</code> regular expressions to detect the language based on the first
766 line in the file, (for example, matching the line
"#!/bin/bash"). See
767 the highlight documentation and the default config at
768 /etc/highlight/filetypes.conf for more details.
</p>
770 <div class=
"paragraph">
771 <p>For example if repositories you are hosting use
"phtml" extension for
772 PHP files, and you want to have correct syntax-highlighting for those
773 files, you can add the following to gitweb configuration:
</p>
775 <div class=
"listingblock">
776 <div class=
"content">
777 <pre>our %highlight_ext;
778 $highlight_ext{'phtml'} = 'php';
</pre>
786 <h3 id=
"_links_and_their_targets">Links and their targets
</h3>
787 <div class=
"paragraph">
788 <p>The configuration variables described below configure some of gitweb links:
789 their target and their look (text or image), and where to find page
790 prerequisites (stylesheet, favicon, images, scripts). Usually they are left
791 at their default values, with the possible exception of
<code>@stylesheets
</code>
796 <dt class=
"hdlist1">@stylesheets
</dt>
798 <p>List of URIs of stylesheets (relative to the base URI of a page). You
799 might specify more than one stylesheet, for example to use
"gitweb.css"
800 as base with site specific modifications in a separate stylesheet
801 to make it easier to upgrade gitweb. For example, you can add
802 a
<code>site
</code> stylesheet by putting
</p>
803 <div class=
"listingblock">
804 <div class=
"content">
805 <pre>push @stylesheets,
"gitweb-site.css";
</pre>
808 <div class=
"paragraph">
809 <p>in the gitweb config file. Those values that are relative paths are
810 relative to base URI of gitweb.
</p>
812 <div class=
"paragraph">
813 <p>This list should contain the URI of gitweb
’s standard stylesheet. The default
814 URI of gitweb stylesheet can be set at build time using the
<code>GITWEB_CSS
</code>
815 makefile variable. Its default value is
<code>static/gitweb.css
</code>
816 (or
<code>static/gitweb.min.css
</code> if the
<code>CSSMIN
</code> variable is defined,
817 i.e. if CSS minifier is used during build).
</p>
819 <div class=
"paragraph">
820 <p><strong>Note
</strong>: there is also a legacy
<code>$stylesheet
</code> configuration variable, which was
821 used by older gitweb. If
<code>$stylesheet
</code> variable is defined, only CSS stylesheet
822 given by this variable is used by gitweb.
</p>
825 <dt class=
"hdlist1">$logo
</dt>
827 <p>Points to the location where you put
<em>git-logo.png
</em> on your web
828 server, or to be more the generic URI of logo,
72x27 size). This image
829 is displayed in the top right corner of each gitweb page and used as
830 a logo for the Atom feed. Relative to the base URI of gitweb (as a path).
831 Can be adjusted when building gitweb using
<code>GITWEB_LOGO
</code> variable
832 By default set to
<code>static/git-logo.png
</code>.
</p>
834 <dt class=
"hdlist1">$favicon
</dt>
836 <p>Points to the location where you put
<em>git-favicon.png
</em> on your web
837 server, or to be more the generic URI of favicon, which will be served
838 as
"image/png" type. Web browsers that support favicons (website icons)
839 may display them in the browser
’s URL bar and next to the site name in
840 bookmarks. Relative to the base URI of gitweb. Can be adjusted at
841 build time using
<code>GITWEB_FAVICON
</code> variable.
842 By default set to
<code>static/git-favicon.png
</code>.
</p>
844 <dt class=
"hdlist1">$javascript
</dt>
846 <p>Points to the location where you put
<em>gitweb.js
</em> on your web server,
847 or to be more generic the URI of JavaScript code used by gitweb.
848 Relative to the base URI of gitweb. Can be set at build time using
849 the
<code>GITWEB_JS
</code> build-time configuration variable.
</p>
850 <div class=
"paragraph">
851 <p>The default value is either
<code>static/gitweb.js
</code>, or
<code>static/gitweb.min.js
</code> if
852 the
<code>JSMIN
</code> build variable was defined, i.e. if JavaScript minifier was used
853 at build time.
<strong>Note
</strong> that this single file is generated from multiple
854 individual JavaScript
"modules".
</p>
857 <dt class=
"hdlist1">$home_link
</dt>
859 <p>Target of the home link on the top of all pages (the first part of view
860 "breadcrumbs"). By default it is set to the absolute URI of a current page
861 (to the value of
<code>$my_uri
</code> variable, or to
"/" if
<code>$my_uri
</code> is undefined
862 or is an empty string).
</p>
864 <dt class=
"hdlist1">$home_link_str
</dt>
866 <p>Label for the
"home link" at the top of all pages, leading to
<code>$home_link
</code>
867 (usually the main gitweb page, which contains the projects list). It is
868 used as the first component of gitweb
’s
"breadcrumb trail":
869 <em><home-link
></em> <code>/
</code> <em><project
></em> <code>/
</code> <em><action
></em>. Can be set at build time using
870 the
<code>GITWEB_HOME_LINK_STR
</code> variable. By default it is set to
"projects",
871 as this link leads to the list of projects. Another popular choice is to
872 set it to the name of site. Note that it is treated as raw HTML so it
873 should not be set from untrusted sources.
</p>
875 <dt class=
"hdlist1">@extra_breadcrumbs
</dt>
877 <p>Additional links to be added to the start of the breadcrumb trail before
878 the home link, to pages that are logically
"above" the gitweb projects
879 list, such as the organization and department which host the gitweb
880 server. Each element of the list is a reference to an array, in which
881 element
0 is the link text (equivalent to
<code>$home_link_str
</code>) and element
882 1 is the target URL (equivalent to
<code>$home_link
</code>).
</p>
883 <div class=
"paragraph">
884 <p>For example, the following setting produces a breadcrumb trail like
885 "home / dev / projects / …​" where
"projects" is the home link.
</p>
887 <div class=
"listingblock">
888 <div class=
"content">
889 <pre> our @extra_breadcrumbs = (
890 [ 'home' =
> 'https://www.example.org/' ],
891 [ 'dev' =
> 'https://dev.example.org/' ],
896 <dt class=
"hdlist1">$logo_url
</dt>
897 <dt class=
"hdlist1">$logo_label
</dt>
899 <p>URI and label (title) for the Git logo link (or your site logo,
900 if you chose to use different logo image). By default, these both
901 refer to Git homepage,
<a href=
"https://git-scm.com" class=
"bare">https://git-scm.com
</a>; in the past, they pointed
902 to Git documentation at
<a href=
"https://www.kernel.org" class=
"bare">https://www.kernel.org
</a>.
</p>
908 <h3 id=
"_changing_gitwebs_look">Changing gitweb
’s look
</h3>
909 <div class=
"paragraph">
910 <p>You can adjust how pages generated by gitweb look using the variables described
911 below. You can change the site name, add common headers and footers for all
912 pages, and add a description of this gitweb installation on its main page
913 (which is the projects list page), etc.
</p>
917 <dt class=
"hdlist1">$site_name
</dt>
919 <p>Name of your site or organization, to appear in page titles. Set it
920 to something descriptive for clearer bookmarks etc. If this variable
921 is not set or is, then gitweb uses the value of the
<code>SERVER_NAME
</code>
922 <code>CGI
</code> environment variable, setting site name to
"$SERVER_NAME Git",
923 or
"Untitled Git" if this variable is not set (e.g. if running gitweb
924 as standalone script).
</p>
925 <div class=
"paragraph">
926 <p>Can be set using the
<code>GITWEB_SITENAME
</code> at build time. Unset by default.
</p>
929 <dt class=
"hdlist1">$site_html_head_string
</dt>
931 <p>HTML snippet to be included in the
<head
> section of each page.
932 Can be set using
<code>GITWEB_SITE_HTML_HEAD_STRING
</code> at build time.
933 No default value.
</p>
935 <dt class=
"hdlist1">$site_header
</dt>
937 <p>Name of a file with HTML to be included at the top of each page.
938 Relative to the directory containing the
<em>gitweb.cgi
</em> script.
939 Can be set using
<code>GITWEB_SITE_HEADER
</code> at build time. No default
942 <dt class=
"hdlist1">$site_footer
</dt>
944 <p>Name of a file with HTML to be included at the bottom of each page.
945 Relative to the directory containing the
<em>gitweb.cgi
</em> script.
946 Can be set using
<code>GITWEB_SITE_FOOTER
</code> at build time. No default
949 <dt class=
"hdlist1">$home_text
</dt>
951 <p>Name of a HTML file which, if it exists, is included on the
952 gitweb projects overview page (
"projects_list" view). Relative to
953 the directory containing the gitweb.cgi script. Default value
954 can be adjusted during build time using
<code>GITWEB_HOMETEXT
</code> variable.
955 By default set to
<em>indextext.html
</em>.
</p>
957 <dt class=
"hdlist1">$projects_list_description_width
</dt>
959 <p>The width (in characters) of the
"Description" column of the projects list.
960 Longer descriptions will be truncated (trying to cut at word boundary);
961 the full description is available in the
<em>title
</em> attribute (usually shown on
962 mouseover). The default is
25, which might be too small if you
963 use long project descriptions.
</p>
965 <dt class=
"hdlist1">$default_projects_order
</dt>
967 <p>Default value of ordering of projects on projects list page, which
968 means the ordering used if you don
’t explicitly sort projects list
969 (if there is no
"o" CGI query parameter in the URL). Valid values
970 are
"none" (unsorted),
"project" (projects are by project name,
971 i.e. path to repository relative to
<code>$projectroot
</code>),
"descr"
972 (project description),
"owner", and
"age" (by date of most current
974 <div class=
"paragraph">
975 <p>Default value is
"project". Unknown value means unsorted.
</p>
982 <h3 id=
"_changing_gitwebs_behavior">Changing gitweb
’s behavior
</h3>
983 <div class=
"paragraph">
984 <p>These configuration variables control
<em>internal
</em> gitweb behavior.
</p>
988 <dt class=
"hdlist1">$default_blob_plain_mimetype
</dt>
990 <p>Default mimetype for the blob_plain (raw) view, if mimetype checking
991 doesn
’t result in some other type; by default
"text/plain".
992 Gitweb guesses mimetype of a file to display based on extension
993 of its filename, using
<code>$mimetypes_file
</code> (if set and file exists)
994 and
<code>/etc/mime.types
</code> files (see
<strong>mime.types
</strong>(
5) manpage; only
995 filename extension rules are supported by gitweb).
</p>
997 <dt class=
"hdlist1">$default_text_plain_charset
</dt>
999 <p>Default charset for text files. If this is not set, the web server
1000 configuration will be used. Unset by default.
</p>
1002 <dt class=
"hdlist1">$fallback_encoding
</dt>
1004 <p>Gitweb assumes this charset when a line contains non-UTF-
8 characters.
1005 The fallback decoding is used without error checking, so it can be even
1006 "utf-8". The value must be a valid encoding; see the
<strong>Encoding::Supported
</strong>(
3pm)
1007 man page for a list. The default is
"latin1", aka.
"iso-8859-1".
</p>
1009 <dt class=
"hdlist1">@diff_opts
</dt>
1011 <p>Rename detection options for git-diff and git-diff-tree. The default is
1012 ('-M'); set it to ('-C') or ('-C', '-C') to also detect copies,
1013 or set it to () i.e. empty list if you don
’t want to have renames
1015 <div class=
"paragraph">
1016 <p><strong>Note
</strong> that rename and especially copy detection can be quite
1017 CPU-intensive. Note also that non Git tools can have problems with
1018 patches generated with options mentioned above, especially when they
1019 involve file copies ('-C') or criss-cross renames ('-B').
</p>
1026 <h3 id=
"_some_optional_features_and_policies">Some optional features and policies
</h3>
1027 <div class=
"paragraph">
1028 <p>Most of features are configured via %feature hash; however some of extra
1029 gitweb features can be turned on and configured using variables described
1030 below. This list beside configuration variables that control how gitweb
1031 looks does contain variables configuring administrative side of gitweb
1032 (e.g. cross-site scripting prevention; admittedly this as side effect
1033 affects how
"summary" pages look like, or load limiting).
</p>
1037 <dt class=
"hdlist1">@git_base_url_list
</dt>
1039 <p>List of Git base URLs. These URLs are used to generate URLs
1040 describing from where to fetch a project, which are shown on
1041 project summary page. The full fetch URL is
"<code>$git_base_url/$project</code>",
1042 for each element of this list. You can set up multiple base URLs
1043 (for example one for
<code>git://
</code> protocol, and one for
<code>http://
</code>
1045 <div class=
"paragraph">
1046 <p>Note that per repository configuration can be set in
<code>$GIT_DIR/cloneurl
</code>
1047 file, or as values of multi-value
<code>gitweb.url
</code> configuration variable in
1048 project config. Per-repository configuration takes precedence over value
1049 composed from
<code>@git_base_url_list
</code> elements and project name.
</p>
1051 <div class=
"paragraph">
1052 <p>You can setup one single value (single entry/item in this list) at build
1053 time by setting the
<code>GITWEB_BASE_URL
</code> build-time configuration variable.
1054 By default it is set to (), i.e. an empty list. This means that gitweb
1055 would not try to create project URL (to fetch) from project name.
</p>
1058 <dt class=
"hdlist1">$projects_list_group_categories
</dt>
1060 <p>Whether to enable the grouping of projects by category on the project
1061 list page. The category of a project is determined by the
1062 <code>$GIT_DIR/category
</code> file or the
<code>gitweb.category
</code> variable in each
1063 repository
’s configuration. Disabled by default (set to
0).
</p>
1065 <dt class=
"hdlist1">$project_list_default_category
</dt>
1067 <p>Default category for projects for which none is specified. If this is
1068 set to the empty string, such projects will remain uncategorized and
1069 listed at the top, above categorized projects. Used only if project
1070 categories are enabled, which means if
<code>$projects_list_group_categories
</code>
1071 is true. By default set to
"" (empty string).
</p>
1073 <dt class=
"hdlist1">$prevent_xss
</dt>
1075 <p>If true, some gitweb features are disabled to prevent content in
1076 repositories from launching cross-site scripting (XSS) attacks. Set this
1077 to true if you don
’t trust the content of your repositories.
1078 False by default (set to
0).
</p>
1080 <dt class=
"hdlist1">$maxload
</dt>
1082 <p>Used to set the maximum load that we will still respond to gitweb queries.
1083 If the server load exceeds this value then gitweb will return
1084 "503 Service Unavailable" error. The server load is taken to be
0
1085 if gitweb cannot determine its value. Currently it works only on Linux,
1086 where it uses
<code>/proc/loadavg
</code>; the load there is the number of active
1087 tasks on the system
 — processes that are actually running
 — averaged
1088 over the last minute.
</p>
1089 <div class=
"paragraph">
1090 <p>Set
<code>$maxload
</code> to undefined value (
<code>undef
</code>) to turn this feature off.
1091 The default value is
300.
</p>
1094 <dt class=
"hdlist1">$omit_age_column
</dt>
1096 <p>If true, omit the column with date of the most current commit on the
1097 projects list page. It can save a bit of I/O and a fork per repository.
</p>
1099 <dt class=
"hdlist1">$omit_owner
</dt>
1101 <p>If true prevents displaying information about repository owner.
</p>
1103 <dt class=
"hdlist1">$per_request_config
</dt>
1105 <p>If this is set to code reference, it will be run once for each request.
1106 You can set parts of configuration that change per session this way.
1107 For example, one might use the following code in a gitweb configuration
1109 <div class=
"listingblock">
1110 <div class=
"content">
1111 <pre>our $per_request_config = sub {
1112 $ENV{GL_USER} = $cgi-
>remote_user ||
"gitweb";
1116 <div class=
"paragraph">
1117 <p>If
<code>$per_request_config
</code> is not a code reference, it is interpreted as boolean
1118 value. If it is true gitweb will process config files once per request,
1119 and if it is false gitweb will process config files only once, each time it
1120 is executed. True by default (set to
1).
</p>
1122 <div class=
"paragraph">
1123 <p><strong>NOTE
</strong>:
<code>$my_url
</code>,
<code>$my_uri
</code>, and
<code>$base_url
</code> are overwritten with their default
1124 values before every request, so if you want to change them, be sure to set
1125 this variable to true or a code reference effecting the desired changes.
</p>
1127 <div class=
"paragraph">
1128 <p>This variable matters only when using persistent web environments that
1129 serve multiple requests using single gitweb instance, like mod_perl,
1130 FastCGI or Plackup.
</p>
1137 <h3 id=
"_other_variables">Other variables
</h3>
1138 <div class=
"paragraph">
1139 <p>Usually you should not need to change (adjust) any of configuration
1140 variables described below; they should be automatically set by gitweb to
1145 <dt class=
"hdlist1">$version
</dt>
1147 <p>Gitweb version, set automatically when creating gitweb.cgi from
1148 gitweb.perl. You might want to modify it if you are running modified
1149 gitweb, for example
</p>
1150 <div class=
"listingblock">
1151 <div class=
"content">
1152 <pre>our $version .=
" with caching";
</pre>
1155 <div class=
"paragraph">
1156 <p>if you run modified version of gitweb with caching support. This variable
1157 is purely informational, used e.g. in the
"generator" meta header in HTML
1161 <dt class=
"hdlist1">$my_url
</dt>
1162 <dt class=
"hdlist1">$my_uri
</dt>
1164 <p>Full URL and absolute URL of the gitweb script;
1165 in earlier versions of gitweb you might have need to set those
1166 variables, but now there should be no need to do it. See
1167 <code>$per_request_config
</code> if you need to set them still.
</p>
1169 <dt class=
"hdlist1">$base_url
</dt>
1171 <p>Base URL for relative URLs in pages generated by gitweb,
1172 (e.g.
<code>$logo
</code>,
<code>$favicon
</code>,
<code>@stylesheets
</code> if they are relative URLs),
1173 needed and used
<em><base
href=
"$base_url"></em> only for URLs with nonempty
1174 PATH_INFO. Usually gitweb sets its value correctly,
1175 and there is no need to set this variable, e.g. to $my_uri or
"/".
1176 See
<code>$per_request_config
</code> if you need to override it anyway.
</p>
1184 <h2 id=
"_configuring_gitweb_features">CONFIGURING GITWEB FEATURES
</h2>
1185 <div class=
"sectionbody">
1186 <div class=
"paragraph">
1187 <p>Many gitweb features can be enabled (or disabled) and configured using the
1188 %feature hash. Names of gitweb features are keys of this hash.
</p>
1190 <div class=
"paragraph">
1191 <p>Each %feature hash element is a hash reference and has the following
1194 <div class=
"listingblock">
1195 <div class=
"content">
1196 <pre>"<feature-name>" =
> {
1197 "sub" =
> <feature-sub-(subroutine)
>,
1198 "override" =
> <allow-override-(boolean)
>,
1199 "default" =
> [
<options
>... ]
1203 <div class=
"paragraph">
1204 <p>Some features cannot be overridden per project. For those
1205 features the structure of appropriate %feature hash element has a simpler
1208 <div class=
"listingblock">
1209 <div class=
"content">
1210 <pre>"<feature-name>" =
> {
1212 "default" =
> [
<options
>... ]
1216 <div class=
"paragraph">
1217 <p>As one can see it lacks the 'sub' element.
</p>
1219 <div class=
"paragraph">
1220 <p>The meaning of each part of feature configuration is described
1225 <dt class=
"hdlist1">default
</dt>
1227 <p>List (array reference) of feature parameters (if there are any),
1228 used also to toggle (enable or disable) given feature.
</p>
1229 <div class=
"paragraph">
1230 <p>Note that it is currently
<strong>always
</strong> an array reference, even if
1231 feature doesn
’t accept any configuration parameters, and 'default'
1232 is used only to turn it on or off. In such case you turn feature on
1233 by setting this element to [
<code>1</code>], and torn it off by setting it to
1234 [
<code>0</code>]. See also the passage about the
"blame" feature in the
"Examples"
1237 <div class=
"paragraph">
1238 <p>To disable features that accept parameters (are configurable), you
1239 need to set this element to empty list i.e. [].
</p>
1242 <dt class=
"hdlist1">override
</dt>
1244 <p>If this field has a true value then the given feature is
1245 overridable, which means that it can be configured
1246 (or enabled/disabled) on a per-repository basis.
</p>
1247 <div class=
"paragraph">
1248 <p>Usually given
"<feature>" is configurable via the
<code>gitweb.
</code><em><feature
></em>
1249 config variable in the per-repository Git configuration file.
</p>
1251 <div class=
"paragraph">
1252 <p><strong>Note
</strong> that no feature is overridable by default.
</p>
1255 <dt class=
"hdlist1">sub
</dt>
1257 <p>Internal detail of implementation. What is important is that
1258 if this field is not present then per-repository override for
1259 given feature is not supported.
</p>
1260 <div class=
"paragraph">
1261 <p>You wouldn
’t need to ever change it in gitweb config file.
</p>
1267 <h3 id=
"_features_in_feature">Features in %feature
</h3>
1268 <div class=
"paragraph">
1269 <p>The gitweb features that are configurable via %feature hash are listed
1270 below. This should be a complete list, but ultimately the authoritative
1271 and complete list is in gitweb.cgi source code, with features described
1272 in the comments.
</p>
1276 <dt class=
"hdlist1">blame
</dt>
1278 <p>Enable the
"blame" and
"blame_incremental" blob views, showing for
1279 each line the last commit that modified it; see
<a href=
"git-blame.html">git-blame(
1)
</a>.
1280 This can be very CPU-intensive and is therefore disabled by default.
</p>
1281 <div class=
"paragraph">
1282 <p>This feature can be configured on a per-repository basis via
1283 repository
’s
<code>gitweb.blame
</code> configuration variable (boolean).
</p>
1286 <dt class=
"hdlist1">snapshot
</dt>
1288 <p>Enable and configure the
"snapshot" action, which allows user to
1289 download a compressed archive of any tree or commit, as produced
1290 by
<a href=
"git-archive.html">git-archive(
1)
</a> and possibly additionally compressed.
1291 This can potentially generate high traffic if you have large project.
</p>
1292 <div class=
"paragraph">
1293 <p>The value of 'default' is a list of names of snapshot formats,
1294 defined in %known_snapshot_formats hash, that you wish to offer.
1295 Supported formats include
"tgz",
"tbz2",
"txz" (gzip/bzip2/xz
1296 compressed tar archive) and
"zip"; please consult gitweb sources for
1297 a definitive list. By default only
"tgz" is offered.
</p>
1299 <div class=
"paragraph">
1300 <p>This feature can be configured on a per-repository basis via
1301 repository
’s
<code>gitweb.snapshot
</code> configuration variable, which contains
1302 a comma separated list of formats or
"none" to disable snapshots.
1303 Unknown values are ignored.
</p>
1306 <dt class=
"hdlist1">grep
</dt>
1308 <p>Enable grep search, which lists the files in currently selected
1309 tree (directory) containing the given string; see
<a href=
"git-grep.html">git-grep(
1)
</a>.
1310 This can be potentially CPU-intensive, of course. Enabled by default.
</p>
1311 <div class=
"paragraph">
1312 <p>This feature can be configured on a per-repository basis via
1313 repository
’s
<code>gitweb.grep
</code> configuration variable (boolean).
</p>
1316 <dt class=
"hdlist1">pickaxe
</dt>
1318 <p>Enable the so called pickaxe search, which will list the commits
1319 that introduced or removed a given string in a file. This can be
1320 practical and quite faster alternative to
"blame" action, but it is
1321 still potentially CPU-intensive. Enabled by default.
</p>
1322 <div class=
"paragraph">
1323 <p>The pickaxe search is described in
<a href=
"git-log.html">git-log(
1)
</a> (the
1324 description of
<code>-S
</code><em><string
></em> option, which refers to pickaxe entry in
1325 <a href=
"gitdiffcore.html">gitdiffcore(
7)
</a> for more details).
</p>
1327 <div class=
"paragraph">
1328 <p>This feature can be configured on a per-repository basis by setting
1329 repository
’s
<code>gitweb.pickaxe
</code> configuration variable (boolean).
</p>
1332 <dt class=
"hdlist1">show-sizes
</dt>
1334 <p>Enable showing size of blobs (ordinary files) in a
"tree" view, in a
1335 separate column, similar to what
<code>ls
</code> <code>-l
</code> does; see description of
1336 <code>-l
</code> option in
<a href=
"git-ls-tree.html">git-ls-tree(
1)
</a> manpage. This costs a bit of
1337 I/O. Enabled by default.
</p>
1338 <div class=
"paragraph">
1339 <p>This feature can be configured on a per-repository basis via
1340 repository
’s
<code>gitweb.showSizes
</code> configuration variable (boolean).
</p>
1343 <dt class=
"hdlist1">patches
</dt>
1345 <p>Enable and configure
"patches" view, which displays list of commits in email
1346 (plain text) output format; see also
<a href=
"git-format-patch.html">git-format-patch(
1)
</a>.
1347 The value is the maximum number of patches in a patchset generated
1348 in
"patches" view. Set the
<em>default
</em> field to a list containing single
1349 item of or to an empty list to disable patch view, or to a list
1350 containing a single negative number to remove any limit.
1351 Default value is
16.
</p>
1352 <div class=
"paragraph">
1353 <p>This feature can be configured on a per-repository basis via
1354 repository
’s
<code>gitweb.patches
</code> configuration variable (integer).
</p>
1357 <dt class=
"hdlist1">avatar
</dt>
1359 <p>Avatar support. When this feature is enabled, views such as
1360 "shortlog" or
"commit" will display an avatar associated with
1361 the email of each committer and author.
</p>
1362 <div class=
"paragraph">
1363 <p>Currently available providers are
<strong>"gravatar"</strong> and
<strong>"picon"</strong>.
1364 Only one provider at a time can be selected (
<em>default
</em> is one element list).
1365 If an unknown provider is specified, the feature is disabled.
1366 <strong>Note
</strong> that some providers might require extra Perl packages to be
1367 installed; see
<code>gitweb/INSTALL
</code> for more details.
</p>
1369 <div class=
"paragraph">
1370 <p>This feature can be configured on a per-repository basis via
1371 repository
’s
<code>gitweb.avatar
</code> configuration variable.
</p>
1373 <div class=
"paragraph">
1374 <p>See also %avatar_size with pixel sizes for icons and avatars
1375 (
"default" is used for one-line like
"log" and
"shortlog",
"double"
1376 is used for two-line like
"commit",
"commitdiff" or
"tag"). If the
1377 default font sizes or lineheights are changed (e.g. via adding extra
1378 CSS stylesheet in
<code>@stylesheets
</code>), it may be appropriate to change
1382 <dt class=
"hdlist1">email-privacy
</dt>
1384 <p>Redact e-mail addresses from the generated HTML, etc. content.
1385 This obscures e-mail addresses retrieved from the author/committer
1386 and comment sections of the Git log.
1387 It is meant to hinder web crawlers that harvest and abuse addresses.
1388 Such crawlers may not respect robots.txt.
1389 Note that users and user tools also see the addresses as redacted.
1390 If Gitweb is not the final step in a workflow then subsequent steps
1391 may misbehave because of the redacted information they receive.
1392 Disabled by default.
</p>
1394 <dt class=
"hdlist1">highlight
</dt>
1396 <p>Server-side syntax highlight support in
"blob" view. It requires
1397 <code>$highlight_bin
</code> program to be available (see the description of
1398 this variable in the
"Configuration variables" section above),
1399 and therefore is disabled by default.
</p>
1400 <div class=
"paragraph">
1401 <p>This feature can be configured on a per-repository basis via
1402 repository
’s
<code>gitweb.highlight
</code> configuration variable (boolean).
</p>
1405 <dt class=
"hdlist1">remote_heads
</dt>
1407 <p>Enable displaying remote heads (remote-tracking branches) in the
"heads"
1408 list. In most cases the list of remote-tracking branches is an
1409 unnecessary internal private detail, and this feature is therefore
1410 disabled by default.
<a href=
"git-instaweb.html">git-instaweb(
1)
</a>, which is usually used
1411 to browse local repositories, enables and uses this feature.
</p>
1412 <div class=
"paragraph">
1413 <p>This feature can be configured on a per-repository basis via
1414 repository
’s
<code>gitweb.remote_heads
</code> configuration variable (boolean).
</p>
1419 <div class=
"paragraph">
1420 <p>The remaining features cannot be overridden on a per project basis.
</p>
1424 <dt class=
"hdlist1">search
</dt>
1426 <p>Enable text search, which will list the commits which match author,
1427 committer or commit text to a given string; see the description of
1428 <code>--author
</code>,
<code>--committer
</code> and
<code>--grep
</code> options in
<a href=
"git-log.html">git-log(
1)
</a>
1429 manpage. Enabled by default.
</p>
1430 <div class=
"paragraph">
1431 <p>Project specific override is not supported.
</p>
1434 <dt class=
"hdlist1">forks
</dt>
1436 <p>If this feature is enabled, gitweb considers projects in
1437 subdirectories of project root (basename) to be forks of existing
1438 projects. For each project
<code>$projname.git
</code>, projects in the
1439 <code>$projname/
</code> directory and its subdirectories will not be
1440 shown in the main projects list. Instead, a '+' mark is shown
1441 next to
<code>$projname
</code>, which links to a
"forks" view that lists all
1442 the forks (all projects in
<code>$projname/
</code> subdirectory). Additionally
1443 a
"forks" view for a project is linked from project summary page.
</p>
1444 <div class=
"paragraph">
1445 <p>If the project list is taken from a file (
<code>$projects_list
</code> points to a
1446 file), forks are only recognized if they are listed after the main project
1449 <div class=
"paragraph">
1450 <p>Project specific override is not supported.
</p>
1453 <dt class=
"hdlist1">actions
</dt>
1455 <p>Insert custom links to the action bar of all project pages. This
1456 allows you to link to third-party scripts integrating into gitweb.
</p>
1457 <div class=
"paragraph">
1458 <p>The
"default" value consists of a list of triplets in the form
1459 (
"<em><label></em>",
"<em><link></em>",
"<em><position></em>") where
"position" is the label
1460 after which to insert the link,
"link" is a format string where %n
1461 expands to the project name, %f to the project path within the
1462 filesystem (i.e.
"$projectroot/$project"), %h to the current hash
1463 ('h' gitweb parameter) and %b to the current hash base
1464 ('hb' gitweb parameter); %% expands to '%'.
</p>
1466 <div class=
"paragraph">
1467 <p>For example, at the time this page was written, the
<a href=
"https://repo.or.cz" class=
"bare">https://repo.or.cz
</a>
1468 Git hosting site set it to the following to enable graphical log
1469 (using the third party tool
<strong>git-browser
</strong>):
</p>
1471 <div class=
"listingblock">
1472 <div class=
"content">
1473 <pre>$feature{'actions'}{'default'} =
1474 [ ('graphiclog', '/git-browser/by-commit.html?r=%n', 'summary')];
</pre>
1477 <div class=
"paragraph">
1478 <p>This adds a link titled
"graphiclog" after the
"summary" link, leading to
1479 <code>git-browser
</code> script, passing
<code>r=
</code><em><project
></em> as a query parameter.
</p>
1481 <div class=
"paragraph">
1482 <p>Project specific override is not supported.
</p>
1485 <dt class=
"hdlist1">timed
</dt>
1487 <p>Enable displaying how much time and how many Git commands it took to
1488 generate and display each page in the page footer (at the bottom of
1489 page). For example the footer might contain:
"This page took 6.53325
1490 seconds and 13 Git commands to generate." Disabled by default.
</p>
1491 <div class=
"paragraph">
1492 <p>Project specific override is not supported.
</p>
1495 <dt class=
"hdlist1">javascript-timezone
</dt>
1497 <p>Enable and configure the ability to change a common time zone for dates
1498 in gitweb output via JavaScript. Dates in gitweb output include
1499 authordate and committerdate in
"commit",
"commitdiff" and
"log"
1500 views, and taggerdate in
"tag" view. Enabled by default.
</p>
1501 <div class=
"paragraph">
1502 <p>The value is a list of three values: a default time zone (for if the client
1503 hasn
’t selected some other time zone and saved it in a cookie), a name of cookie
1504 where to store selected time zone, and a CSS class used to mark up
1505 dates for manipulation. If you want to turn this feature off, set
"default"
1506 to empty list: [].
</p>
1508 <div class=
"paragraph">
1509 <p>Typical gitweb config files will only change starting (default) time zone,
1510 and leave other elements at their default values:
</p>
1512 <div class=
"listingblock">
1513 <div class=
"content">
1514 <pre>$feature{'javascript-timezone'}{'default'}[
0] =
"utc";
</pre>
1517 <div class=
"paragraph">
1518 <p>The example configuration presented here is guaranteed to be backwards
1519 and forward compatible.
</p>
1521 <div class=
"paragraph">
1522 <p>Time zone values can be
"local" (for local time zone that browser uses),
"utc"
1523 (what gitweb uses when JavaScript or this feature is disabled), or numerical
1524 time zones in the form of
"+/-HHMM", such as
"+0200".
</p>
1526 <div class=
"paragraph">
1527 <p>Project specific override is not supported.
</p>
1530 <dt class=
"hdlist1">extra-branch-refs
</dt>
1532 <p>List of additional directories under
"refs" which are going to
1533 be used as branch refs. For example if you have a gerrit setup
1534 where all branches under refs/heads/ are official,
1535 push-after-review ones and branches under refs/sandbox/,
1536 refs/wip and refs/other are user ones where permissions are
1537 much wider, then you might want to set this variable as
1539 <div class=
"listingblock">
1540 <div class=
"content">
1541 <pre>$feature{'extra-branch-refs'}{'default'} =
1542 ['sandbox', 'wip', 'other'];
</pre>
1545 <div class=
"paragraph">
1546 <p>This feature can be configured on per-repository basis after setting
1547 $feature{
<em>extra-branch-refs
</em>}{
<em>override
</em>} to true, via repository
’s
1548 <code>gitweb.extraBranchRefs
</code> configuration variable, which contains a
1549 space separated list of refs. An example:
</p>
1551 <div class=
"listingblock">
1552 <div class=
"content">
1554 extraBranchRefs = sandbox wip other
</pre>
1557 <div class=
"paragraph">
1558 <p>The gitweb.extraBranchRefs is actually a multi-valued configuration
1559 variable, so following example is also correct and the result is the
1560 same as of the snippet above:
</p>
1562 <div class=
"listingblock">
1563 <div class=
"content">
1565 extraBranchRefs = sandbox
1566 extraBranchRefs = wip other
</pre>
1569 <div class=
"paragraph">
1570 <p>It is an error to specify a ref that does not pass
"git check-ref-format"
1571 scrutiny. Duplicated values are filtered.
</p>
1580 <h2 id=
"_examples">EXAMPLES
</h2>
1581 <div class=
"sectionbody">
1582 <div class=
"paragraph">
1583 <p>To enable blame, pickaxe search, and snapshot support (allowing
"tar.gz" and
1584 "zip" snapshots), while allowing individual projects to turn them off, put
1585 the following in your GITWEB_CONFIG file:
</p>
1587 <div class=
"listingblock">
1588 <div class=
"content">
1589 <pre>$feature{'blame'}{'default'} = [
1];
1590 $feature{'blame'}{'override'} =
1;
1592 $feature{'pickaxe'}{'default'} = [
1];
1593 $feature{'pickaxe'}{'override'} =
1;
1595 $feature{'snapshot'}{'default'} = ['zip', 'tgz'];
1596 $feature{'snapshot'}{'override'} =
1;
</pre>
1599 <div class=
"paragraph">
1600 <p>If you allow overriding for the snapshot feature, you can specify which
1601 snapshot formats are globally disabled. You can also add any command-line
1602 options you want (such as setting the compression level). For instance, you
1603 can disable Zip compressed snapshots and set
<strong>gzip
</strong>(
1) to run at level
6 by
1604 adding the following lines to your gitweb configuration file:
</p>
1606 <div class=
"literalblock">
1607 <div class=
"content">
1608 <pre>$known_snapshot_formats{'zip'}{'disabled'} =
1;
1609 $known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-
6'];
</pre>
1615 <h2 id=
"_bugs">BUGS
</h2>
1616 <div class=
"sectionbody">
1617 <div class=
"paragraph">
1618 <p>Debugging would be easier if the fallback configuration file
1619 (
<code>/etc/gitweb.conf
</code>) and environment variable to override its location
1620 (
<em>GITWEB_CONFIG_SYSTEM
</em>) had names reflecting their
"fallback" role.
1621 The current names are kept to avoid breaking working setups.
</p>
1626 <h2 id=
"_environment">ENVIRONMENT
</h2>
1627 <div class=
"sectionbody">
1628 <div class=
"paragraph">
1629 <p>The location of per-instance and system-wide configuration files can be
1630 overridden using the following environment variables:
</p>
1634 <dt class=
"hdlist1">GITWEB_CONFIG
</dt>
1636 <p>Sets location of per-instance configuration file.
</p>
1638 <dt class=
"hdlist1">GITWEB_CONFIG_SYSTEM
</dt>
1640 <p>Sets location of fallback system-wide configuration file.
1641 This file is read only if per-instance one does not exist.
</p>
1643 <dt class=
"hdlist1">GITWEB_CONFIG_COMMON
</dt>
1645 <p>Sets location of common system-wide configuration file.
</p>
1652 <h2 id=
"_files">FILES
</h2>
1653 <div class=
"sectionbody">
1656 <dt class=
"hdlist1">gitweb_config.perl
</dt>
1658 <p>This is default name of per-instance configuration file. The
1659 format of this file is described above.
</p>
1661 <dt class=
"hdlist1">/etc/gitweb.conf
</dt>
1663 <p>This is default name of fallback system-wide configuration
1664 file. This file is used only if per-instance configuration
1665 variable is not found.
</p>
1667 <dt class=
"hdlist1">/etc/gitweb-common.conf
</dt>
1669 <p>This is default name of common system-wide configuration
1677 <h2 id=
"_see_also">SEE ALSO
</h2>
1678 <div class=
"sectionbody">
1679 <div class=
"paragraph">
1680 <p><a href=
"gitweb.html">gitweb(
1)
</a>,
<a href=
"git-instaweb.html">git-instaweb(
1)
</a></p>
1682 <div class=
"paragraph">
1683 <p><em>gitweb/README
</em>,
<em>gitweb/INSTALL
</em></p>
1688 <h2 id=
"_git">GIT
</h2>
1689 <div class=
"sectionbody">
1690 <div class=
"paragraph">
1691 <p>Part of the
<a href=
"git.html">git(
1)
</a> suite
</p>
1697 <div id=
"footer-text">
1698 Last updated
2024-
02-
08 15:
45:
59 -
0800