99dbbfb966b763c4d65de1f46c25b31398891232
   1git-http-backend(1)
   2===================
   3
   4NAME
   5----
   6git-http-backend - Server side implementation of Git over HTTP
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git-http-backend'
  12
  13DESCRIPTION
  14-----------
  15A simple CGI program to serve the contents of a Git repository to Git
  16clients accessing the repository over http:// and https:// protocols.
  17
  18By default, only the `upload-pack` service is enabled, which serves
  19'git-fetch-pack' and 'git-ls-remote' clients, which are invoked from
  20'git-fetch', 'git-pull', and 'git-clone'.
  21
  22This is ideally suited for read-only updates, i.e., pulling from
  23git repositories.
  24
  25SERVICES
  26--------
  27These services can be enabled/disabled using the per-repository
  28configuration file:
  29
  30http.uploadpack::
  31        This serves 'git-fetch-pack' and 'git-ls-remote' clients.
  32        It is enabled by default, but a repository can disable it
  33        by setting this configuration item to `false`.
  34
  35http.receivepack::
  36        This serves 'git-send-pack' clients, allowing push.  It is
  37        disabled by default for anonymous users, and enabled by
  38        default for users authenticated by the web server.  It can be
  39        disabled by setting this item to `false`, or enabled for all
  40        users, including anonymous users, by setting it to `true`.
  41
  42URL TRANSLATION
  43---------------
  44To determine the location of the repository on disk, 'git-http-backend'
  45concatenates the environment variables PATH_INFO, which is set
  46automatically by the web server, and GIT_PROJECT_ROOT, which must be set
  47manually in the web server configuration.  If GIT_PROJECT_ROOT is not
  48set, 'git-http-backend' reads PATH_TRANSLATED, which is also set
  49automatically by the web server.
  50
  51EXAMPLES
  52--------
  53
  54Apache 2.x::
  55        Ensure mod_cgi, mod_alias, and mod_env are enabled, set
  56        GIT_PROJECT_ROOT (or DocumentRoot) appropriately, and
  57        create a ScriptAlias to the CGI:
  58+
  59----------------------------------------------------------------
  60SetEnv GIT_PROJECT_ROOT /var/www/git
  61ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
  62----------------------------------------------------------------
  63+
  64To enable anonymous read access but authenticated write access,
  65require authorization with a LocationMatch directive:
  66+
  67----------------------------------------------------------------
  68<LocationMatch ".*/git-receive-pack$">
  69        AuthType Basic
  70        AuthName "Git Access"
  71        Require group committers
  72        ...
  73</LocationMatch>
  74----------------------------------------------------------------
  75+
  76To require authentication for both reads and writes, use a Location
  77directive around the repository, or one of its parent directories:
  78+
  79----------------------------------------------------------------
  80<Location /git/private>
  81        AuthType Basic
  82        AuthName "Private Git Access"
  83        Require group committers
  84        ...
  85</Location>
  86----------------------------------------------------------------
  87
  88Accelerated static Apache 2.x::
  89        Similar to the above, but Apache can be used to return static
  90        files that are stored on disk.  On many systems this may
  91        be more efficient as Apache can ask the kernel to copy the
  92        file contents from the file system directly to the network:
  93+
  94----------------------------------------------------------------
  95SetEnv GIT_PROJECT_ROOT /var/www/git
  96
  97ScriptAlias /git/        /usr/libexec/git-core/git-http-backend/
  98Alias       /git_static/ /var/www/git/
  99
 100RewriteEngine on
 101RewriteRule ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$    /git_static/$1 [PT]
 102RewriteRule ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.pack)$ /git_static/$1 [PT]
 103RewriteRule ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.idx)$  /git_static/$1 [PT]
 104----------------------------------------------------------------
 105
 106
 107ENVIRONMENT
 108-----------
 109'git-http-backend' relies upon the CGI environment variables set
 110by the invoking web server, including:
 111
 112* PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED)
 113* REMOTE_USER
 114* REMOTE_ADDR
 115* CONTENT_TYPE
 116* QUERY_STRING
 117* REQUEST_METHOD
 118
 119The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and
 120GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}',
 121ensuring that any reflogs created by 'git-receive-pack' contain some
 122identifying information of the remote user who performed the push.
 123
 124All CGI environment variables are available to each of the hooks
 125invoked by the 'git-receive-pack'.
 126
 127Author
 128------
 129Written by Shawn O. Pearce <spearce@spearce.org>.
 130
 131Documentation
 132--------------
 133Documentation by Shawn O. Pearce <spearce@spearce.org>.
 134
 135GIT
 136---
 137Part of the linkgit:git[1] suite