git-daemon(1)
=============

NAME
----
git-daemon - A really simple server for Git repositories

SYNOPSIS
--------
[verse]
'git daemon' [--verbose] [--syslog] [--export-all]
	     [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
	     [--strict-paths] [--base-path=<path>] [--base-path-relaxed]
	     [--user-path | --user-path=<path>]
	     [--interpolated-path=<pathtemplate>]
	     [--reuseaddr] [--detach] [--pid-file=<file>]
	     [--enable=<service>] [--disable=<service>]
	     [--allow-override=<service>] [--forbid-override=<service>]
	     [--access-hook=<path>] [--[no-]informative-errors]
	     [--inetd |
	      [--listen=<host-or-ipaddr>] [--port=<n>]
	      [--user=<user> [--group=<group>]]]
	     [--log-destination=(stderr|syslog|none)]
	     [<directory>...]

DESCRIPTION
-----------
A really simple TCP Git daemon that normally listens on port "DEFAULT_GIT_PORT"
aka 9418.  It waits for a connection asking for a service, and will serve
that service if it is enabled.

It verifies that the directory has the magic file "git-daemon-export-ok", and
it will refuse to export any Git directory that hasn't explicitly been marked
for export this way (unless the `--export-all` parameter is specified). If you
pass some directory paths as 'git daemon' arguments, the offers are limited to
repositories within those directories.

By default, only `upload-pack` service is enabled, which serves
'git fetch-pack' and 'git ls-remote' clients, which are invoked
from 'git fetch', 'git pull', and 'git clone'.

This is ideally suited for read-only updates, i.e., pulling from
Git repositories.

An `upload-archive` also exists to serve 'git archive'.

OPTIONS
-------
--strict-paths::
	Match paths exactly (i.e. don't allow "/foo/repo" when the real path is
	"/foo/repo.git" or "/foo/repo/.git") and don't do user-relative paths.
	'git daemon' will refuse to start when this option is enabled and no
	directory arguments are provided.

--base-path=<path>::
	Remap all the path requests as relative to the given path.
	This is sort of "Git root" - if you run 'git daemon' with
	'--base-path=/srv/git' on example.com, then if you later try to pull
	'git://example.com/hello.git', 'git daemon' will interpret the path
	as `/srv/git/hello.git`.

--base-path-relaxed::
	If --base-path is enabled and repo lookup fails, with this option
	'git daemon' will attempt to lookup without prefixing the base path.
	This is useful for switching to --base-path usage, while still
	allowing the old paths.

--interpolated-path=<pathtemplate>::
	To support virtual hosting, an interpolated path template can be
	used to dynamically construct alternate paths.  The template
	supports %H for the target hostname as supplied by the client but
	converted to all lowercase, %CH for the canonical hostname,
	%IP for the server's IP address, %P for the port number,
	and %D for the absolute path of the named repository.
	After interpolation, the path is validated against the directory
	list.

--export-all::
	Allow pulling from all directories that look like Git repositories
	(have the 'objects' and 'refs' subdirectories), even if they
	do not have the 'git-daemon-export-ok' file.

--inetd::
	Have the server run as an inetd service. Implies --syslog (may be
	overridden with `--log-destination=`).
	Incompatible with --detach, --port, --listen, --user and --group
	options.

--listen=<host-or-ipaddr>::
	Listen on a specific IP address or hostname.  IP addresses can
	be either an IPv4 address or an IPv6 address if supported.  If IPv6
	is not supported, then --listen=<hostname> is also not supported and
	--listen must be given an IPv4 address.
	Can be given more than once.
	Incompatible with `--inetd` option.

--port=<n>::
	Listen on an alternative port.  Incompatible with `--inetd` option.

--init-timeout=<n>::
	Timeout (in seconds) between the moment the connection is established
	and the client request is received (typically a rather low value, since
	that should be basically immediate).

--timeout=<n>::
	Timeout (in seconds) for specific client sub-requests. This includes
	the time it takes for the server to process the sub-request and the
	time spent waiting for the next client's request.

--max-connections=<n>::
	Maximum number of concurrent clients, defaults to 32.  Set it to
	zero for no limit.

--syslog::
	Short for `--log-destination=syslog`.

--log-destination=<destination>::
	Send log messages to the specified destination.
	Note that this option does not imply --verbose,
	thus by default only error conditions will be logged.
	The <destination> must be one of:
+
--
stderr::
	Write to standard error.
	Note that if `--detach` is specified,
	the process disconnects from the real standard error,
	making this destination effectively equivalent to `none`.
syslog::
	Write to syslog, using the `git-daemon` identifier.
none::
	Disable all logging.
--
+
The default destination is `syslog` if `--inetd` or `--detach` is specified,
otherwise `stderr`.

--user-path::
--user-path=<path>::
	Allow {tilde}user notation to be used in requests.  When
	specified with no parameter, a request to
	git://host/{tilde}alice/foo is taken as a request to access
	'foo' repository in the home directory of user `alice`.
	If `--user-path=<path>` is specified, the same request is
	taken as a request to access `<path>/foo` repository in
	the home directory of user `alice`.

--verbose::
	Log details about the incoming connections and requested files.

--reuseaddr::
	Use SO_REUSEADDR when binding the listening socket.
	This allows the server to restart without waiting for
	old connections to time out.

--detach::
	Detach from the shell. Implies --syslog.

--pid-file=<file>::
	Save the process id in 'file'.  Ignored when the daemon
	is run under `--inetd`.

--user=<user>::
--group=<group>::
	Change daemon's uid and gid before entering the service loop.
	When only `--user` is given without `--group`, the
	primary group ID for the user is used.  The values of
	the option are given to `getpwnam(3)` and `getgrnam(3)`
	and numeric IDs are not supported.
+
Giving these options is an error when used with `--inetd`; use
the facility of inet daemon to achieve the same before spawning
'git daemon' if needed.
+
Like many programs that switch user id, the daemon does not reset
environment variables such as `$HOME` when it runs git programs,
e.g. `upload-pack` and `receive-pack`. When using this option, you
may also want to set and export `HOME` to point at the home
directory of `<user>` before starting the daemon, and make sure any
Git configuration files in that directory are readable by `<user>`.

--enable=<service>::
--disable=<service>::
	Enable/disable the service site-wide per default.  Note
	that a service disabled site-wide can still be enabled
	per repository if it is marked overridable and the
	repository enables the service with a configuration
	item.

--allow-override=<service>::
--forbid-override=<service>::
	Allow/forbid overriding the site-wide default with per
	repository configuration.  By default, all the services
	may be overridden.

--[no-]informative-errors::
	When informative errors are turned on, git-daemon will report
	more verbose errors to the client, differentiating conditions
	like "no such repository" from "repository not exported". This
	is more convenient for clients, but may leak information about
	the existence of unexported repositories.  When informative
	errors are not enabled, all errors report "access denied" to the
	client. The default is --no-informative-errors.

--access-hook=<path>::
	Every time a client connects, first run an external command
	specified by the <path> with service name (e.g. "upload-pack"),
	path to the repository, hostname (%H), canonical hostname
	(%CH), IP address (%IP), and TCP port (%P) as its command-line
	arguments. The external command can decide to decline the
	service by exiting with a non-zero status (or to allow it by
	exiting with a zero status).  It can also look at the $REMOTE_ADDR
	and `$REMOTE_PORT` environment variables to learn about the
	requestor when making this decision.
+
The external command can optionally write a single line to its
standard output to be sent to the requestor as an error message when
it declines the service.

<directory>::
	The remaining arguments provide a list of directories. If any
	directories are specified, then the `git-daemon` process will
	serve a requested directory only if it is contained in one of
	these directories. If `--strict-paths` is specified, then the
	requested directory must match one of these directories exactly.

SERVICES
--------

These services can be globally enabled/disabled using the
command-line options of this command.  If finer-grained
control is desired (e.g. to allow 'git archive' to be run
against only in a few selected repositories the daemon serves),
the per-repository configuration file can be used to enable or
disable them.

upload-pack::
	This serves 'git fetch-pack' and 'git ls-remote'
	clients.  It is enabled by default, but a repository can
	disable it by setting `daemon.uploadpack` configuration
	item to `false`.

upload-archive::
	This serves 'git archive --remote'.  It is disabled by
	default, but a repository can enable it by setting
	`daemon.uploadarch` configuration item to `true`.

receive-pack::
	This serves 'git send-pack' clients, allowing anonymous
	push.  It is disabled by default, as there is _no_
	authentication in the protocol (in other words, anybody
	can push anything into the repository, including removal
	of refs).  This is solely meant for a closed LAN setting
	where everybody is friendly.  This service can be
	enabled by setting `daemon.receivepack` configuration item to
	`true`.

EXAMPLES
--------
We assume the following in /etc/services::
+
------------
$ grep 9418 /etc/services
git		9418/tcp		# Git Version Control System
------------

'git daemon' as inetd server::
	To set up 'git daemon' as an inetd service that handles any
	repository within `/pub/foo` or `/pub/bar`, place an entry like
	the following into `/etc/inetd` all on one line:
+
------------------------------------------------
	git stream tcp nowait nobody  /usr/bin/git
		git daemon --inetd --verbose --export-all
		/pub/foo /pub/bar
------------------------------------------------


'git daemon' as inetd server for virtual hosts::
	To set up 'git daemon' as an inetd service that handles
	repositories for different virtual hosts, `www.example.com`
	and `www.example.org`, place an entry like the following into
	`/etc/inetd` all on one line:
+
------------------------------------------------
	git stream tcp nowait nobody /usr/bin/git
		git daemon --inetd --verbose --export-all
		--interpolated-path=/pub/%H%D
		/pub/www.example.org/software
		/pub/www.example.com/software
		/software
------------------------------------------------
+
In this example, the root-level directory `/pub` will contain
a subdirectory for each virtual host name supported.
Further, both hosts advertise repositories simply as
`git://www.example.com/software/repo.git`.  For pre-1.4.0
clients, a symlink from `/software` into the appropriate
default repository could be made as well.


'git daemon' as regular daemon for virtual hosts::
	To set up 'git daemon' as a regular, non-inetd service that
	handles repositories for multiple virtual hosts based on
	their IP addresses, start the daemon like this:
+
------------------------------------------------
	git daemon --verbose --export-all
		--interpolated-path=/pub/%IP/%D
		/pub/192.168.1.200/software
		/pub/10.10.220.23/software
------------------------------------------------
+
In this example, the root-level directory `/pub` will contain
a subdirectory for each virtual host IP address supported.
Repositories can still be accessed by hostname though, assuming
they correspond to these IP addresses.

selectively enable/disable services per repository::
	To enable 'git archive --remote' and disable 'git fetch' against
	a repository, have the following in the configuration file in the
	repository (that is the file 'config' next to `HEAD`, 'refs' and
	'objects').
+
----------------------------------------------------------------
	[daemon]
		uploadpack = false
		uploadarch = true
----------------------------------------------------------------


ENVIRONMENT
-----------
'git daemon' will set REMOTE_ADDR to the IP address of the client
that connected to it, if the IP address is available. REMOTE_ADDR will
be available in the environment of hooks called when
services are performed.

GIT
---
Part of the linkgit:git[1] suite
