path: root/Documentation/git-http-backend.txt
diff options
authorShawn O. Pearce <>2009-10-31 00:47:32 (GMT)
committerJunio C Hamano <>2009-11-05 01:58:04 (GMT)
commit2f4038ab337e55017d4ff21ddbae9427544ca02c (patch)
tree946e2ec5533057a197be4b0efc9d885a1c2154e1 /Documentation/git-http-backend.txt
parentd8f67d205eb98ea6dab915c29122158054218128 (diff)
Git-aware CGI to provide dumb HTTP transport
The git-http-backend CGI can be configured into any Apache server using ScriptAlias, such as with the following configuration: LoadModule cgi_module /usr/libexec/apache2/ LoadModule alias_module /usr/libexec/apache2/ ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ Repositories are accessed via the translated PATH_INFO. The CGI is backwards compatible with the dumb client, allowing all older HTTP clients to continue to download repositories which are managed by the CGI. Signed-off-by: Shawn O. Pearce <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'Documentation/git-http-backend.txt')
1 files changed, 105 insertions, 0 deletions
diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.txt
new file mode 100644
index 0000000..867675f
--- /dev/null
+++ b/Documentation/git-http-backend.txt
@@ -0,0 +1,105 @@
+git-http-backend - Server side implementation of Git over HTTP
+A simple CGI program to serve the contents of a Git repository to Git
+clients accessing the repository over http:// and https:// protocols.
+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'.
+This is ideally suited for read-only updates, i.e., pulling from
+git repositories.
+'git-http-backend' relies on the invoking web server to perform
+URL to path translation, and store the repository path into the
+PATH_TRANSLATED environment variable. Most web servers will do
+this translation automatically, resolving the suffix after the
+CGI name relative to the server's document root.
+Apache 2.x::
+ To serve all Git repositories contained within the '/git/'
+ subdirectory of the DocumentRoot, ensure mod_cgi and
+ mod_alias are enabled, and create a ScriptAlias to the CGI:
+ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/git/
+<Directory /usr/libexec/git-core>
+ Options None
+<Files /usr/libexec/git-core/git-http-backend>
+ Options ExecCGI
+To require authentication for reads, use a Directory
+directive around the repository, or one of its parent directories:
+<Directory /var/www/git/private>
+ AuthType Basic
+ AuthName "Private Git Access"
+ Require group committers
+ ...
+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:
+DocumentRoot /var/www
+ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/git/
+Alias /git_static/ /var/www/git/
+RewriteEngine on
+RewriteRule ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /git_static/$1 [PT]
+RewriteRule ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.pack)$ /git_static/$1 [PT]
+RewriteRule ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.idx)$ /git_static/$1 [PT]
+'git-http-backend' relies upon the CGI environment variables set
+by the invoking web server, including:
+Written by Shawn O. Pearce <>.
+Documentation by Shawn O. Pearce <>.
+Part of the linkgit:git[1] suite