8b2bd7cdac
Similar to how git-daemon checks whether a repository is OK to be exported, smart-http should also check. This check can be satisfied in two different ways: the environmental variable GIT_HTTP_EXPORT_ALL may be set to export all repositories, or the individual repository may have the file git-daemon-export-ok. Acked-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Tarmigan Casebolt <tarmigan+git@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
189 lines
6.5 KiB
Plaintext
189 lines
6.5 KiB
Plaintext
git-http-backend(1)
|
|
===================
|
|
|
|
NAME
|
|
----
|
|
git-http-backend - Server side implementation of Git over HTTP
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git-http-backend'
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
A simple CGI program to serve the contents of a Git repository to Git
|
|
clients accessing the repository over http:// and https:// protocols.
|
|
The program supports clients fetching using both the smart HTTP protcol
|
|
and the backwards-compatible dumb HTTP protocol, as well as clients
|
|
pushing using the smart HTTP protocol.
|
|
|
|
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
|
|
GIT_HTTP_EXPORT_ALL environmental variable is set).
|
|
|
|
By default, only the `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'. If the client is authenticated,
|
|
the `receive-pack` service is enabled, which serves 'git-send-pack'
|
|
clients, which is invoked from 'git-push'.
|
|
|
|
SERVICES
|
|
--------
|
|
These services can be enabled/disabled using the per-repository
|
|
configuration file:
|
|
|
|
http.getanyfile::
|
|
This serves older Git clients which are unable to use the
|
|
upload pack service. When enabled, clients are able to read
|
|
any file within the repository, including objects that are
|
|
no longer reachable from a branch but are still present.
|
|
It is enabled by default, but a repository can disable it
|
|
by setting this configuration item to `false`.
|
|
|
|
http.uploadpack::
|
|
This serves 'git-fetch-pack' and 'git-ls-remote' clients.
|
|
It is enabled by default, but a repository can disable it
|
|
by setting this configuration item to `false`.
|
|
|
|
http.receivepack::
|
|
This serves 'git-send-pack' clients, allowing push. It is
|
|
disabled by default for anonymous users, and enabled by
|
|
default for users authenticated by the web server. It can be
|
|
disabled by setting this item to `false`, or enabled for all
|
|
users, including anonymous users, by setting it to `true`.
|
|
|
|
URL TRANSLATION
|
|
---------------
|
|
To determine the location of the repository on disk, 'git-http-backend'
|
|
concatenates the environment variables PATH_INFO, which is set
|
|
automatically by the web server, and GIT_PROJECT_ROOT, which must be set
|
|
manually in the web server configuration. If GIT_PROJECT_ROOT is not
|
|
set, 'git-http-backend' reads PATH_TRANSLATED, which is also set
|
|
automatically by the web server.
|
|
|
|
EXAMPLES
|
|
--------
|
|
All of the following examples map 'http://$hostname/git/foo/bar.git'
|
|
to '/var/www/git/foo/bar.git'.
|
|
|
|
Apache 2.x::
|
|
Ensure mod_cgi, mod_alias, and mod_env are enabled, set
|
|
GIT_PROJECT_ROOT (or DocumentRoot) appropriately, and
|
|
create a ScriptAlias to the CGI:
|
|
+
|
|
----------------------------------------------------------------
|
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
|
SetEnv GIT_HTTP_EXPORT_ALL
|
|
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
|
|
----------------------------------------------------------------
|
|
+
|
|
To enable anonymous read access but authenticated write access,
|
|
require authorization with a LocationMatch directive:
|
|
+
|
|
----------------------------------------------------------------
|
|
<LocationMatch "^/git/.*/git-receive-pack$">
|
|
AuthType Basic
|
|
AuthName "Git Access"
|
|
Require group committers
|
|
...
|
|
</LocationMatch>
|
|
----------------------------------------------------------------
|
|
+
|
|
To require authentication for both reads and writes, use a Location
|
|
directive around the repository, or one of its parent directories:
|
|
+
|
|
----------------------------------------------------------------
|
|
<Location /git/private>
|
|
AuthType Basic
|
|
AuthName "Private Git Access"
|
|
Require group committers
|
|
...
|
|
</Location>
|
|
----------------------------------------------------------------
|
|
+
|
|
To serve gitweb at the same url, use a ScriptAliasMatch to only
|
|
those URLs that 'git-http-backend' can handle, and forward the
|
|
rest to gitweb:
|
|
+
|
|
----------------------------------------------------------------
|
|
ScriptAliasMatch \
|
|
"(?x)^/git/(.*/(HEAD | \
|
|
info/refs | \
|
|
objects/(info/[^/]+ | \
|
|
[0-9a-f]{2}/[0-9a-f]{38} | \
|
|
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
|
|
git-(upload|receive)-pack))$" \
|
|
/usr/libexec/git-core/git-http-backend/$1
|
|
|
|
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
|
|
----------------------------------------------------------------
|
|
|
|
Accelerated static Apache 2.x::
|
|
Similar to the above, but Apache can be used to return static
|
|
files that are stored on disk. On many systems this may
|
|
be more efficient as Apache can ask the kernel to copy the
|
|
file contents from the file system directly to the network:
|
|
+
|
|
----------------------------------------------------------------
|
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
|
|
|
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
|
|
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
|
|
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
|
|
----------------------------------------------------------------
|
|
+
|
|
This can be combined with the gitweb configuration:
|
|
+
|
|
----------------------------------------------------------------
|
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
|
|
|
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
|
|
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
|
|
ScriptAliasMatch \
|
|
"(?x)^/git/(.*/(HEAD | \
|
|
info/refs | \
|
|
objects/info/[^/]+ | \
|
|
git-(upload|receive)-pack))$" \
|
|
/usr/libexec/git-core/git-http-backend/$1
|
|
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
|
|
----------------------------------------------------------------
|
|
|
|
|
|
ENVIRONMENT
|
|
-----------
|
|
'git-http-backend' relies upon the CGI environment variables set
|
|
by the invoking web server, including:
|
|
|
|
* PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED)
|
|
* REMOTE_USER
|
|
* REMOTE_ADDR
|
|
* CONTENT_TYPE
|
|
* QUERY_STRING
|
|
* REQUEST_METHOD
|
|
|
|
The GIT_HTTP_EXPORT_ALL environmental variable may be passed to
|
|
'git-http-backend' to bypass the check for the "git-daemon-export-ok"
|
|
file in each repository before allowing export of that repository.
|
|
|
|
The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and
|
|
GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}',
|
|
ensuring that any reflogs created by 'git-receive-pack' contain some
|
|
identifying information of the remote user who performed the push.
|
|
|
|
All CGI environment variables are available to each of the hooks
|
|
invoked by the 'git-receive-pack'.
|
|
|
|
Author
|
|
------
|
|
Written by Shawn O. Pearce <spearce@spearce.org>.
|
|
|
|
Documentation
|
|
--------------
|
|
Documentation by Shawn O. Pearce <spearce@spearce.org>.
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|