]>
Commit | Line | Data |
---|---|---|
2f4038ab SP |
1 | git-http-backend(1) |
2 | =================== | |
3 | ||
4 | NAME | |
5 | ---- | |
6 | git-http-backend - Server side implementation of Git over HTTP | |
7 | ||
8 | SYNOPSIS | |
9 | -------- | |
10 | [verse] | |
11 | 'git-http-backend' | |
12 | ||
13 | DESCRIPTION | |
14 | ----------- | |
15 | A simple CGI program to serve the contents of a Git repository to Git | |
16 | clients accessing the repository over http:// and https:// protocols. | |
b9af4ab3 ML |
17 | The program supports clients fetching using both the smart HTTP protcol |
18 | and the backwards-compatible dumb HTTP protocol, as well as clients | |
19 | pushing using the smart HTTP protocol. | |
2f4038ab SP |
20 | |
21 | By default, only the `upload-pack` service is enabled, which serves | |
22 | 'git-fetch-pack' and 'git-ls-remote' clients, which are invoked from | |
b9af4ab3 ML |
23 | 'git-fetch', 'git-pull', and 'git-clone'. If the client is authenticated, |
24 | the `receive-pack` service is enabled, which serves 'git-send-pack' | |
25 | clients, which is invoked from 'git-push'. | |
2f4038ab | 26 | |
556cfa3b SP |
27 | SERVICES |
28 | -------- | |
29 | These services can be enabled/disabled using the per-repository | |
30 | configuration file: | |
31 | ||
5abb013b SP |
32 | http.getanyfile:: |
33 | This serves older Git clients which are unable to use the | |
34 | upload pack service. When enabled, clients are able to read | |
35 | any file within the repository, including objects that are | |
36 | no longer reachable from a branch but are still present. | |
37 | It is enabled by default, but a repository can disable it | |
38 | by setting this configuration item to `false`. | |
39 | ||
556cfa3b SP |
40 | http.uploadpack:: |
41 | This serves 'git-fetch-pack' and 'git-ls-remote' clients. | |
42 | It is enabled by default, but a repository can disable it | |
43 | by setting this configuration item to `false`. | |
44 | ||
45 | http.receivepack:: | |
46 | This serves 'git-send-pack' clients, allowing push. It is | |
47 | disabled by default for anonymous users, and enabled by | |
48 | default for users authenticated by the web server. It can be | |
49 | disabled by setting this item to `false`, or enabled for all | |
50 | users, including anonymous users, by setting it to `true`. | |
51 | ||
2f4038ab SP |
52 | URL TRANSLATION |
53 | --------------- | |
917adc03 ML |
54 | To determine the location of the repository on disk, 'git-http-backend' |
55 | concatenates the environment variables PATH_INFO, which is set | |
56 | automatically by the web server, and GIT_PROJECT_ROOT, which must be set | |
57 | manually in the web server configuration. If GIT_PROJECT_ROOT is not | |
58 | set, 'git-http-backend' reads PATH_TRANSLATED, which is also set | |
59 | automatically by the web server. | |
2f4038ab SP |
60 | |
61 | EXAMPLES | |
62 | -------- | |
b9af4ab3 ML |
63 | All of the following examples map 'http://$hostname/git/foo/bar.git' |
64 | to '/var/www/git/foo/bar.git'. | |
2f4038ab SP |
65 | |
66 | Apache 2.x:: | |
917adc03 ML |
67 | Ensure mod_cgi, mod_alias, and mod_env are enabled, set |
68 | GIT_PROJECT_ROOT (or DocumentRoot) appropriately, and | |
69 | create a ScriptAlias to the CGI: | |
2f4038ab SP |
70 | + |
71 | ---------------------------------------------------------------- | |
917adc03 ML |
72 | SetEnv GIT_PROJECT_ROOT /var/www/git |
73 | ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ | |
2f4038ab SP |
74 | ---------------------------------------------------------------- |
75 | + | |
556cfa3b SP |
76 | To enable anonymous read access but authenticated write access, |
77 | require authorization with a LocationMatch directive: | |
78 | + | |
79 | ---------------------------------------------------------------- | |
f5ba2d18 | 80 | <LocationMatch "^/git/.*/git-receive-pack$"> |
556cfa3b SP |
81 | AuthType Basic |
82 | AuthName "Git Access" | |
83 | Require group committers | |
84 | ... | |
85 | </LocationMatch> | |
86 | ---------------------------------------------------------------- | |
87 | + | |
917adc03 | 88 | To require authentication for both reads and writes, use a Location |
2f4038ab SP |
89 | directive around the repository, or one of its parent directories: |
90 | + | |
91 | ---------------------------------------------------------------- | |
917adc03 | 92 | <Location /git/private> |
2f4038ab SP |
93 | AuthType Basic |
94 | AuthName "Private Git Access" | |
95 | Require group committers | |
96 | ... | |
917adc03 | 97 | </Location> |
2f4038ab | 98 | ---------------------------------------------------------------- |
8127f778 ML |
99 | + |
100 | To serve gitweb at the same url, use a ScriptAliasMatch to only | |
101 | those URLs that 'git-http-backend' can handle, and forward the | |
102 | rest to gitweb: | |
103 | + | |
104 | ---------------------------------------------------------------- | |
105 | ScriptAliasMatch \ | |
106 | "(?x)^/git/(.*/(HEAD | \ | |
107 | info/refs | \ | |
108 | objects/(info/[^/]+ | \ | |
109 | [0-9a-f]{2}/[0-9a-f]{38} | \ | |
110 | pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ | |
111 | git-(upload|receive)-pack))$" \ | |
112 | /usr/libexec/git-core/git-http-backend/$1 | |
113 | ||
114 | ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/ | |
115 | ---------------------------------------------------------------- | |
2f4038ab SP |
116 | |
117 | Accelerated static Apache 2.x:: | |
118 | Similar to the above, but Apache can be used to return static | |
119 | files that are stored on disk. On many systems this may | |
120 | be more efficient as Apache can ask the kernel to copy the | |
121 | file contents from the file system directly to the network: | |
122 | + | |
123 | ---------------------------------------------------------------- | |
917adc03 | 124 | SetEnv GIT_PROJECT_ROOT /var/www/git |
2f4038ab | 125 | |
0ebb1fa7 ML |
126 | AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 |
127 | AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 | |
128 | ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ | |
2f4038ab | 129 | ---------------------------------------------------------------- |
8127f778 ML |
130 | + |
131 | This can be combined with the gitweb configuration: | |
132 | + | |
133 | ---------------------------------------------------------------- | |
134 | SetEnv GIT_PROJECT_ROOT /var/www/git | |
135 | ||
136 | AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 | |
137 | AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 | |
138 | ScriptAliasMatch \ | |
139 | "(?x)^/git/(.*/(HEAD | \ | |
140 | info/refs | \ | |
141 | objects/info/[^/]+ | \ | |
142 | git-(upload|receive)-pack))$" \ | |
143 | /usr/libexec/git-core/git-http-backend/$1 | |
144 | ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/ | |
145 | ---------------------------------------------------------------- | |
2f4038ab SP |
146 | |
147 | ||
148 | ENVIRONMENT | |
149 | ----------- | |
150 | 'git-http-backend' relies upon the CGI environment variables set | |
151 | by the invoking web server, including: | |
152 | ||
917adc03 | 153 | * PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED) |
2f4038ab SP |
154 | * REMOTE_USER |
155 | * REMOTE_ADDR | |
156 | * CONTENT_TYPE | |
157 | * QUERY_STRING | |
158 | * REQUEST_METHOD | |
159 | ||
556cfa3b SP |
160 | The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and |
161 | GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}', | |
162 | ensuring that any reflogs created by 'git-receive-pack' contain some | |
163 | identifying information of the remote user who performed the push. | |
164 | ||
165 | All CGI environment variables are available to each of the hooks | |
166 | invoked by the 'git-receive-pack'. | |
167 | ||
2f4038ab SP |
168 | Author |
169 | ------ | |
170 | Written by Shawn O. Pearce <spearce@spearce.org>. | |
171 | ||
172 | Documentation | |
173 | -------------- | |
174 | Documentation by Shawn O. Pearce <spearce@spearce.org>. | |
175 | ||
176 | GIT | |
177 | --- | |
178 | Part of the linkgit:git[1] suite |