]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-daemon.txt
CodingGuidelines: formatting HEAD in documentation
[thirdparty/git.git] / Documentation / git-daemon.txt
CommitLineData
7fc9d69f
JH
1git-daemon(1)
2=============
3
4NAME
5----
2de9b711 6git-daemon - A really simple server for Git repositories
7fc9d69f
JH
7
8SYNOPSIS
9--------
353ce815 10[verse]
b1889c36 11'git daemon' [--verbose] [--syslog] [--export-all]
62b4698e
ŠN
12 [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
13 [--strict-paths] [--base-path=<path>] [--base-path-relaxed]
14 [--user-path | --user-path=<path>]
15 [--interpolated-path=<pathtemplate>]
16 [--reuseaddr] [--detach] [--pid-file=<file>]
17 [--enable=<service>] [--disable=<service>]
18 [--allow-override=<service>] [--forbid-override=<service>]
0460ed2c
FC
19 [--access-hook=<path>] [--[no-]informative-errors]
20 [--inetd |
21 [--listen=<host_or_ipaddr>] [--port=<n>]
22 [--user=<user> [--group=<group>]]]
62b4698e 23 [<directory>...]
7fc9d69f
JH
24
25DESCRIPTION
26-----------
2de9b711 27A really simple TCP Git daemon that normally listens on port "DEFAULT_GIT_PORT"
355f5412
JH
28aka 9418. It waits for a connection asking for a service, and will serve
29that service if it is enabled.
7fc9d69f 30
62cd033d 31It verifies that the directory has the magic file "git-daemon-export-ok", and
2de9b711 32it will refuse to export any Git directory that hasn't explicitly been marked
bcf9626a 33for export this way (unless the `--export-all` parameter is specified). If you
0b444cdb 34pass some directory paths as 'git daemon' arguments, you can further restrict
2707da9c 35the offers to a whitelist comprising of those.
62cd033d 36
355f5412 37By default, only `upload-pack` service is enabled, which serves
0b444cdb
TR
38'git fetch-pack' and 'git ls-remote' clients, which are invoked
39from 'git fetch', 'git pull', and 'git clone'.
355f5412
JH
40
41This is ideally suited for read-only updates, i.e., pulling from
2de9b711 42Git repositories.
7fc9d69f 43
0b444cdb 44An `upload-archive` also exists to serve 'git archive'.
e2b1d1cc 45
7fc9d69f
JH
46OPTIONS
47-------
ce335fe0 48--strict-paths::
4dbd1352
AE
49 Match paths exactly (i.e. don't allow "/foo/repo" when the real path is
50 "/foo/repo.git" or "/foo/repo/.git") and don't do user-relative paths.
0b444cdb 51 'git daemon' will refuse to start when this option is enabled and no
4dbd1352
AE
52 whitelist is specified.
53
62b4698e 54--base-path=<path>::
b21c31c9 55 Remap all the path requests as relative to the given path.
48a8c26c 56 This is sort of "Git root" - if you run 'git daemon' with
b21c31c9 57 '--base-path=/srv/git' on example.com, then if you later try to pull
0b444cdb 58 'git://example.com/hello.git', 'git daemon' will interpret the path
603968d2 59 as '/srv/git/hello.git'.
b21c31c9 60
73a7a656
JA
61--base-path-relaxed::
62 If --base-path is enabled and repo lookup fails, with this option
0b444cdb 63 'git daemon' will attempt to lookup without prefixing the base path.
73a7a656
JA
64 This is useful for switching to --base-path usage, while still
65 allowing the old paths.
66
62b4698e 67--interpolated-path=<pathtemplate>::
49ba83fb
JL
68 To support virtual hosting, an interpolated path template can be
69 used to dynamically construct alternate paths. The template
dd467629
JL
70 supports %H for the target hostname as supplied by the client but
71 converted to all lowercase, %CH for the canonical hostname,
72 %IP for the server's IP address, %P for the port number,
49ba83fb 73 and %D for the absolute path of the named repository.
dd467629
JL
74 After interpolation, the path is validated against the directory
75 whitelist.
49ba83fb 76
2707da9c 77--export-all::
48a8c26c 78 Allow pulling from all directories that look like Git repositories
4dbd1352 79 (have the 'objects' and 'refs' subdirectories), even if they
2707da9c
PB
80 do not have the 'git-daemon-export-ok' file.
81
62cd033d 82--inetd::
bce8230d 83 Have the server run as an inetd service. Implies --syslog.
9cddf56e
EFL
84 Incompatible with --detach, --port, --listen, --user and --group
85 options.
dd467629 86
62b4698e 87--listen=<host_or_ipaddr>::
62854410
MH
88 Listen on a specific IP address or hostname. IP addresses can
89 be either an IPv4 address or an IPv6 address if supported. If IPv6
dd467629
JL
90 is not supported, then --listen=hostname is also not supported and
91 --listen must be given an IPv4 address.
3a3a29c1 92 Can be given more than once.
bcf9626a 93 Incompatible with `--inetd` option.
7fc9d69f 94
62b4698e 95--port=<n>::
bcf9626a 96 Listen on an alternative port. Incompatible with `--inetd` option.
7fc9d69f 97
62b4698e 98--init-timeout=<n>::
b8843efc
MS
99 Timeout (in seconds) between the moment the connection is established
100 and the client request is received (typically a rather low value, since
2707da9c
PB
101 that should be basically immediate).
102
62b4698e 103--timeout=<n>::
b8843efc
MS
104 Timeout (in seconds) for specific client sub-requests. This includes
105 the time it takes for the server to process the sub-request and the
106 time spent waiting for the next client's request.
2707da9c 107
62b4698e 108--max-connections=<n>::
3bd62c21
SB
109 Maximum number of concurrent clients, defaults to 32. Set it to
110 zero for no limit.
111
9048fe1c
PB
112--syslog::
113 Log to syslog instead of stderr. Note that this option does not imply
114 --verbose, thus by default only error conditions will be logged.
115
3240240f 116--user-path::
62b4698e 117--user-path=<path>::
4fce51cf 118 Allow {tilde}user notation to be used in requests. When
603968d2 119 specified with no parameter, requests to
4fce51cf 120 git://host/{tilde}alice/foo is taken as a request to access
603968d2
JH
121 'foo' repository in the home directory of user `alice`.
122 If `--user-path=path` is specified, the same request is
123 taken as a request to access `path/foo` repository in
124 the home directory of user `alice`.
125
b5cf3c8b
PB
126--verbose::
127 Log details about the incoming connections and requested files.
128
6c35119a
ML
129--reuseaddr::
130 Use SO_REUSEADDR when binding the listening socket.
131 This allows the server to restart without waiting for
132 old connections to time out.
133
134--detach::
135 Detach from the shell. Implies --syslog.
136
62b4698e 137--pid-file=<file>::
bdd73795
JH
138 Save the process id in 'file'. Ignored when the daemon
139 is run under `--inetd`.
6c35119a 140
62b4698e
ŠN
141--user=<user>::
142--group=<group>::
678dac6b
TS
143 Change daemon's uid and gid before entering the service loop.
144 When only `--user` is given without `--group`, the
145 primary group ID for the user is used. The values of
146 the option are given to `getpwnam(3)` and `getgrnam(3)`
147 and numeric IDs are not supported.
148+
149Giving these options is an error when used with `--inetd`; use
150the facility of inet daemon to achieve the same before spawning
0b444cdb 151'git daemon' if needed.
714d2586
JH
152+
153Like many programs that switch user id, the daemon does not reset
154environment variables such as `$HOME` when it runs git programs,
155e.g. `upload-pack` and `receive-pack`. When using this option, you
156may also want to set and export `HOME` to point at the home
157directory of `<user>` before starting the daemon, and make sure any
158Git configuration files in that directory are readable by `<user>`.
678dac6b 159
62b4698e
ŠN
160--enable=<service>::
161--disable=<service>::
355f5412
JH
162 Enable/disable the service site-wide per default. Note
163 that a service disabled site-wide can still be enabled
164 per repository if it is marked overridable and the
62854410 165 repository enables the service with a configuration
355f5412
JH
166 item.
167
62b4698e
ŠN
168--allow-override=<service>::
169--forbid-override=<service>::
355f5412
JH
170 Allow/forbid overriding the site-wide default with per
171 repository configuration. By default, all the services
06ab60c0 172 may be overridden.
355f5412 173
0460ed2c 174--[no-]informative-errors::
d5570f4d
JK
175 When informative errors are turned on, git-daemon will report
176 more verbose errors to the client, differentiating conditions
177 like "no such repository" from "repository not exported". This
178 is more convenient for clients, but may leak information about
179 the existence of unexported repositories. When informative
180 errors are not enabled, all errors report "access denied" to the
181 client. The default is --no-informative-errors.
182
93741e4a
JH
183--access-hook=<path>::
184 Every time a client connects, first run an external command
185 specified by the <path> with service name (e.g. "upload-pack"),
186 path to the repository, hostname (%H), canonical hostname
06ab60c0 187 (%CH), IP address (%IP), and TCP port (%P) as its command-line
93741e4a
JH
188 arguments. The external command can decide to decline the
189 service by exiting with a non-zero status (or to allow it by
190 exiting with a zero status). It can also look at the $REMOTE_ADDR
47d81b5c 191 and `$REMOTE_PORT` environment variables to learn about the
93741e4a
JH
192 requestor when making this decision.
193+
194The external command can optionally write a single line to its
195standard output to be sent to the requestor as an error message when
196it declines the service.
197
4dbd1352
AE
198<directory>::
199 A directory to add to the whitelist of allowed directories. Unless
200 --strict-paths is specified this will also include subdirectories
201 of each named directory.
202
355f5412
JH
203SERVICES
204--------
205
bdd73795 206These services can be globally enabled/disabled using the
06ab60c0 207command-line options of this command. If finer-grained
0b444cdb 208control is desired (e.g. to allow 'git archive' to be run
bdd73795
JH
209against only in a few selected repositories the daemon serves),
210the per-repository configuration file can be used to enable or
211disable them.
212
355f5412 213upload-pack::
0b444cdb 214 This serves 'git fetch-pack' and 'git ls-remote'
355f5412
JH
215 clients. It is enabled by default, but a repository can
216 disable it by setting `daemon.uploadpack` configuration
217 item to `false`.
218
e2b1d1cc 219upload-archive::
0b444cdb 220 This serves 'git archive --remote'. It is disabled by
bdd73795 221 default, but a repository can enable it by setting
74190d23 222 `daemon.uploadarch` configuration item to `true`.
bdd73795
JH
223
224receive-pack::
0b444cdb 225 This serves 'git send-pack' clients, allowing anonymous
bdd73795
JH
226 push. It is disabled by default, as there is _no_
227 authentication in the protocol (in other words, anybody
228 can push anything into the repository, including removal
229 of refs). This is solely meant for a closed LAN setting
230 where everybody is friendly. This service can be
c6056fbc 231 enabled by setting `daemon.receivepack` configuration item to
bdd73795 232 `true`.
e2b1d1cc 233
49ba83fb
JL
234EXAMPLES
235--------
f8a5da6d
CC
236We assume the following in /etc/services::
237+
238------------
239$ grep 9418 /etc/services
240git 9418/tcp # Git Version Control System
241------------
242
0b444cdb
TR
243'git daemon' as inetd server::
244 To set up 'git daemon' as an inetd service that handles any
49ba83fb
JL
245 repository under the whitelisted set of directories, /pub/foo
246 and /pub/bar, place an entry like the following into
247 /etc/inetd all on one line:
248+
249------------------------------------------------
963a653f
JN
250 git stream tcp nowait nobody /usr/bin/git
251 git daemon --inetd --verbose --export-all
49ba83fb
JL
252 /pub/foo /pub/bar
253------------------------------------------------
254
255
0b444cdb
TR
256'git daemon' as inetd server for virtual hosts::
257 To set up 'git daemon' as an inetd service that handles
49ba83fb
JL
258 repositories for different virtual hosts, `www.example.com`
259 and `www.example.org`, place an entry like the following into
260 `/etc/inetd` all on one line:
261+
262------------------------------------------------
963a653f
JN
263 git stream tcp nowait nobody /usr/bin/git
264 git daemon --inetd --verbose --export-all
49ba83fb
JL
265 --interpolated-path=/pub/%H%D
266 /pub/www.example.org/software
267 /pub/www.example.com/software
268 /software
269------------------------------------------------
270+
271In this example, the root-level directory `/pub` will contain
272a subdirectory for each virtual host name supported.
273Further, both hosts advertise repositories simply as
274`git://www.example.com/software/repo.git`. For pre-1.4.0
275clients, a symlink from `/software` into the appropriate
276default repository could be made as well.
277
278
0b444cdb
TR
279'git daemon' as regular daemon for virtual hosts::
280 To set up 'git daemon' as a regular, non-inetd service that
dd467629
JL
281 handles repositories for multiple virtual hosts based on
282 their IP addresses, start the daemon like this:
283+
284------------------------------------------------
963a653f 285 git daemon --verbose --export-all
dd467629
JL
286 --interpolated-path=/pub/%IP/%D
287 /pub/192.168.1.200/software
288 /pub/10.10.220.23/software
289------------------------------------------------
290+
291In this example, the root-level directory `/pub` will contain
292a subdirectory for each virtual host IP address supported.
293Repositories can still be accessed by hostname though, assuming
294they correspond to these IP addresses.
295
f368f5a6 296selectively enable/disable services per repository::
0b444cdb 297 To enable 'git archive --remote' and disable 'git fetch' against
f368f5a6
JH
298 a repository, have the following in the configuration file in the
299 repository (that is the file 'config' next to 'HEAD', 'refs' and
300 'objects').
bdd73795
JH
301+
302----------------------------------------------------------------
f368f5a6
JH
303 [daemon]
304 uploadpack = false
74190d23 305 uploadarch = true
bdd73795
JH
306----------------------------------------------------------------
307
308
53ffb878
JH
309ENVIRONMENT
310-----------
0b444cdb 311'git daemon' will set REMOTE_ADDR to the IP address of the client
53ffb878
JH
312that connected to it, if the IP address is available. REMOTE_ADDR will
313be available in the environment of hooks called when
314services are performed.
315
7fc9d69f
JH
316GIT
317---
9e1f0a85 318Part of the linkgit:git[1] suite