6 git-daemon - A really simple server for git repositories
11 'git-daemon' [--verbose] [--syslog] [--export-all]
12 [--timeout=n] [--init-timeout=n] [--strict-paths]
13 [--base-path=path] [--user-path | --user-path=path]
14 [--interpolated-path=pathtemplate]
15 [--reuseaddr] [--detach] [--pid-file=file]
16 [--enable=service] [--disable=service]
17 [--allow-override=service] [--forbid-override=service]
18 [--inetd | [--listen=host_or_ipaddr] [--port=n] [--user=user [--group=group]]
23 A really simple TCP git daemon that normally listens on port "DEFAULT_GIT_PORT"
24 aka 9418. It waits for a connection asking for a service, and will serve
25 that service if it is enabled.
27 It verifies that the directory has the magic file "git-daemon-export-ok", and
28 it will refuse to export any git directory that hasn't explicitly been marked
29 for export this way (unless the '--export-all' parameter is specified). If you
30 pass some directory paths as 'git-daemon' arguments, you can further restrict
31 the offers to a whitelist comprising of those.
33 By default, only `upload-pack` service is enabled, which serves
34 `git-fetch-pack` and `git-peek-remote` clients that are invoked
35 from `git-fetch`, `git-ls-remote`, and `git-clone`.
37 This is ideally suited for read-only updates, i.e., pulling from
43 Match paths exactly (i.e. don't allow "/foo/repo" when the real path is
44 "/foo/repo.git" or "/foo/repo/.git") and don't do user-relative paths.
45 git-daemon will refuse to start when this option is enabled and no
46 whitelist is specified.
49 Remap all the path requests as relative to the given path.
50 This is sort of "GIT root" - if you run git-daemon with
51 '--base-path=/srv/git' on example.com, then if you later try to pull
52 'git://example.com/hello.git', `git-daemon` will interpret the path
53 as '/srv/git/hello.git'.
55 --interpolated-path=pathtemplate::
56 To support virtual hosting, an interpolated path template can be
57 used to dynamically construct alternate paths. The template
58 supports %H for the target hostname as supplied by the client but
59 converted to all lowercase, %CH for the canonical hostname,
60 %IP for the server's IP address, %P for the port number,
61 and %D for the absolute path of the named repository.
62 After interpolation, the path is validated against the directory
66 Allow pulling from all directories that look like GIT repositories
67 (have the 'objects' and 'refs' subdirectories), even if they
68 do not have the 'git-daemon-export-ok' file.
71 Have the server run as an inetd service. Implies --syslog.
72 Incompatible with --port, --listen, --user and --group options.
74 --listen=host_or_ipaddr::
75 Listen on an a specific IP address or hostname. IP addresses can
76 be either an IPv4 address or an IPV6 address if supported. If IPv6
77 is not supported, then --listen=hostname is also not supported and
78 --listen must be given an IPv4 address.
79 Incompatible with '--inetd' option.
82 Listen on an alternative port. Incompatible with '--inetd' option.
85 Timeout between the moment the connection is established and the
86 client request is received (typically a rather low value, since
87 that should be basically immediate).
90 Timeout for specific client sub-requests. This includes the time
91 it takes for the server to process the sub-request and time spent
92 waiting for next client's request.
95 Log to syslog instead of stderr. Note that this option does not imply
96 --verbose, thus by default only error conditions will be logged.
98 --user-path, --user-path=path::
99 Allow ~user notation to be used in requests. When
100 specified with no parameter, requests to
101 git://host/~alice/foo is taken as a request to access
102 'foo' repository in the home directory of user `alice`.
103 If `--user-path=path` is specified, the same request is
104 taken as a request to access `path/foo` repository in
105 the home directory of user `alice`.
108 Log details about the incoming connections and requested files.
111 Use SO_REUSEADDR when binding the listening socket.
112 This allows the server to restart without waiting for
113 old connections to time out.
116 Detach from the shell. Implies --syslog.
119 Save the process id in 'file'.
121 --user=user, --group=group::
122 Change daemon's uid and gid before entering the service loop.
123 When only `--user` is given without `--group`, the
124 primary group ID for the user is used. The values of
125 the option are given to `getpwnam(3)` and `getgrnam(3)`
126 and numeric IDs are not supported.
128 Giving these options is an error when used with `--inetd`; use
129 the facility of inet daemon to achieve the same before spawning
130 `git-daemon` if needed.
132 --enable-service, --disable-service::
133 Enable/disable the service site-wide per default. Note
134 that a service disabled site-wide can still be enabled
135 per repository if it is marked overridable and the
136 repository enables the service with an configuration
139 --allow-override, --forbid-override::
140 Allow/forbid overriding the site-wide default with per
141 repository configuration. By default, all the services
145 A directory to add to the whitelist of allowed directories. Unless
146 --strict-paths is specified this will also include subdirectories
147 of each named directory.
153 This serves `git-fetch-pack` and `git-peek-remote`
154 clients. It is enabled by default, but a repository can
155 disable it by setting `daemon.uploadpack` configuration
160 git-daemon as inetd server::
161 To set up `git-daemon` as an inetd service that handles any
162 repository under the whitelisted set of directories, /pub/foo
163 and /pub/bar, place an entry like the following into
164 /etc/inetd all on one line:
166 ------------------------------------------------
167 git stream tcp nowait nobody /usr/bin/git-daemon
168 git-daemon --inetd --verbose
169 --syslog --export-all
171 ------------------------------------------------
174 git-daemon as inetd server for virtual hosts::
175 To set up `git-daemon` as an inetd service that handles
176 repositories for different virtual hosts, `www.example.com`
177 and `www.example.org`, place an entry like the following into
178 `/etc/inetd` all on one line:
180 ------------------------------------------------
181 git stream tcp nowait nobody /usr/bin/git-daemon
182 git-daemon --inetd --verbose
183 --syslog --export-all
184 --interpolated-path=/pub/%H%D
185 /pub/www.example.org/software
186 /pub/www.example.com/software
188 ------------------------------------------------
190 In this example, the root-level directory `/pub` will contain
191 a subdirectory for each virtual host name supported.
192 Further, both hosts advertise repositories simply as
193 `git://www.example.com/software/repo.git`. For pre-1.4.0
194 clients, a symlink from `/software` into the appropriate
195 default repository could be made as well.
198 git-daemon as regular daemon for virtual hosts::
199 To set up `git-daemon` as a regular, non-inetd service that
200 handles repositories for multiple virtual hosts based on
201 their IP addresses, start the daemon like this:
203 ------------------------------------------------
204 git-daemon --verbose --export-all
205 --interpolated-path=/pub/%IP/%D
206 /pub/192.168.1.200/software
207 /pub/10.10.220.23/software
208 ------------------------------------------------
210 In this example, the root-level directory `/pub` will contain
211 a subdirectory for each virtual host IP address supported.
212 Repositories can still be accessed by hostname though, assuming
213 they correspond to these IP addresses.
218 Written by Linus Torvalds <torvalds@osdl.org>, YOSHIFUJI Hideaki
219 <yoshfuji@linux-ipv6.org> and the git-list <git@vger.kernel.org>
223 Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
227 Part of the gitlink:git[7] suite