]>
Commit | Line | Data |
---|---|---|
3fda8c4c ML |
1 | git-cvsserver(1) |
2 | ================ | |
3 | ||
4 | NAME | |
5 | ---- | |
6 | git-cvsserver - A CVS server emulator for git | |
7 | ||
3fda8c4c ML |
8 | SYNOPSIS |
9 | -------- | |
693b6327 FL |
10 | |
11 | SSH: | |
12 | ||
3fda8c4c ML |
13 | [verse] |
14 | export CVS_SERVER=git-cvsserver | |
15 | 'cvs' -d :ext:user@server/path/repo.git co <HEAD_name> | |
16 | ||
693b6327 FL |
17 | pserver (/etc/inetd.conf): |
18 | ||
19 | [verse] | |
20 | cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver | |
21 | ||
22 | Usage: | |
23 | ||
24 | [verse] | |
25 | 'git-cvsserver' [options] [pserver|server] [<directory> ...] | |
26 | ||
27 | OPTIONS | |
28 | ------- | |
29 | ||
30 | All these options obviously only make sense if enforced by the server side. | |
31 | They have been implemented to resemble the gitlink:git-daemon[1] options as | |
32 | closely as possible. | |
33 | ||
34 | --base-path <path>:: | |
35 | Prepend 'path' to requested CVSROOT | |
36 | ||
37 | --strict-paths:: | |
38 | Don't allow recursing into subdirectories | |
39 | ||
40 | --export-all:: | |
226bccb9 FL |
41 | Don't check for `gitcvs.enabled` in config. You also have to specify a list |
42 | of allowed directories (see below) if you want to use this option. | |
693b6327 FL |
43 | |
44 | --version, -V:: | |
45 | Print version information and exit | |
46 | ||
47 | --help, -h, -H:: | |
48 | Print usage information and exit | |
49 | ||
50 | <directory>:: | |
51 | You can specify a list of allowed directories. If no directories | |
52 | are given, all are allowed. This is an additional restriction, gitcvs | |
53 | access still needs to be enabled by the `gitcvs.enabled` config option | |
54 | unless '--export-all' was given, too. | |
55 | ||
56 | ||
3fda8c4c ML |
57 | DESCRIPTION |
58 | ----------- | |
59 | ||
60 | This application is a CVS emulation layer for git. | |
61 | ||
62 | It is highly functional. However, not all methods are implemented, | |
63 | and for those methods that are implemented, | |
64 | not all switches are implemented. | |
65 | ||
66 | Testing has been done using both the CLI CVS client, and the Eclipse CVS | |
67 | plugin. Most functionality works fine with both of these clients. | |
68 | ||
69 | LIMITATIONS | |
70 | ----------- | |
3fda8c4c | 71 | |
b30cc0da ML |
72 | Currently cvsserver works over SSH connections for read/write clients, and |
73 | over pserver for anonymous CVS access. | |
74 | ||
75 | CVS clients cannot tag, branch or perform GIT merges. | |
3fda8c4c | 76 | |
b2475703 FL |
77 | git-cvsserver maps GIT branches to CVS modules. This is very different |
78 | from what most CVS users would expect since in CVS modules usually represent | |
79 | one or more directories. | |
80 | ||
3fda8c4c ML |
81 | INSTALLATION |
82 | ------------ | |
b30cc0da ML |
83 | |
84 | 1. If you are going to offer anonymous CVS access via pserver, add a line in | |
85 | /etc/inetd.conf like | |
0fc8573d FD |
86 | + |
87 | -- | |
88 | ------ | |
b30cc0da ML |
89 | cvspserver stream tcp nowait nobody git-cvsserver pserver |
90 | ||
0fc8573d | 91 | ------ |
893c365a FL |
92 | Note: Some inetd servers let you specify the name of the executable |
93 | independently of the value of argv[0] (i.e. the name the program assumes | |
94 | it was executed with). In this case the correct line in /etc/inetd.conf | |
95 | looks like | |
b30cc0da | 96 | |
0fc8573d | 97 | ------ |
893c365a | 98 | cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver |
b30cc0da | 99 | |
0fc8573d FD |
100 | ------ |
101 | No special setup is needed for SSH access, other than having GIT tools | |
102 | in the PATH. If you have clients that do not accept the CVS_SERVER | |
54842895 FL |
103 | environment variable, you can rename git-cvsserver to cvs. |
104 | ||
db218723 | 105 | Note: Newer CVS versions (>= 1.12.11) also support specifying |
54842895 FL |
106 | CVS_SERVER directly in CVSROOT like |
107 | ||
108 | ------ | |
109 | cvs -d ":ext;CVS_SERVER=git-cvsserver:user@server/path/repo.git" co <HEAD_name> | |
110 | ------ | |
111 | This has the advantage that it will be saved in your 'CVS/Root' files and | |
112 | you don't need to worry about always setting the correct environment | |
113 | variable. | |
0fc8573d | 114 | -- |
3fda8c4c ML |
115 | 2. For each repo that you want accessible from CVS you need to edit config in |
116 | the repo and add the following section. | |
0fc8573d FD |
117 | + |
118 | -- | |
119 | ------ | |
3fda8c4c ML |
120 | [gitcvs] |
121 | enabled=1 | |
b30cc0da | 122 | # optional for debugging |
3fda8c4c ML |
123 | logfile=/path/to/logfile |
124 | ||
0fc8573d FD |
125 | ------ |
126 | Note: you need to ensure each user that is going to invoke git-cvsserver has | |
febe7dcc FL |
127 | write access to the log file and to the database (see |
128 | <<dbbackend,Database Backend>>. If you want to offer write access over | |
129 | SSH, the users of course also need write access to the git repository itself. | |
d55820ce | 130 | |
febe7dcc | 131 | [[configaccessmethod]] |
a192a909 | 132 | All configuration variables can also be overridden for a specific method of |
d55820ce FL |
133 | access. Valid method names are "ext" (for SSH access) and "pserver". The |
134 | following example configuration would disable pserver access while still | |
135 | allowing access over SSH. | |
136 | ------ | |
137 | [gitcvs] | |
138 | enabled=0 | |
139 | ||
140 | [gitcvs "ext"] | |
141 | enabled=1 | |
142 | ------ | |
0fc8573d | 143 | -- |
b30cc0da ML |
144 | 3. On the client machine you need to set the following variables. |
145 | CVSROOT should be set as per normal, but the directory should point at the | |
146 | appropriate git repo. For example: | |
0fc8573d FD |
147 | + |
148 | -- | |
149 | For SSH access, CVS_SERVER should be set to git-cvsserver | |
b30cc0da | 150 | |
0fc8573d | 151 | Example: |
3fda8c4c | 152 | |
0fc8573d | 153 | ------ |
b30cc0da ML |
154 | export CVSROOT=:ext:user@server:/var/git/project.git |
155 | export CVS_SERVER=git-cvsserver | |
0fc8573d FD |
156 | ------ |
157 | -- | |
b30cc0da ML |
158 | 4. For SSH clients that will make commits, make sure their .bashrc file |
159 | sets the GIT_AUTHOR and GIT_COMMITTER variables. | |
160 | ||
161 | 5. Clients should now be able to check out the project. Use the CVS 'module' | |
162 | name to indicate what GIT 'head' you want to check out. Example: | |
0fc8573d FD |
163 | + |
164 | ------ | |
b30cc0da | 165 | cvs co -d project-master master |
0fc8573d | 166 | ------ |
3fda8c4c | 167 | |
febe7dcc FL |
168 | [[dbbackend]] |
169 | Database Backend | |
170 | ---------------- | |
171 | ||
172 | git-cvsserver uses one database per git head (i.e. CVS module) to | |
173 | store information about the repository for faster access. The | |
a192a909 | 174 | database doesn't contain any persistent data and can be completely |
febe7dcc | 175 | regenerated from the git repository at any time. The database |
0f76a543 FL |
176 | needs to be updated (i.e. written to) after every commit. |
177 | ||
178 | If the commit is done directly by using git (as opposed to | |
179 | using git-cvsserver) the update will need to happen on the | |
180 | next repository access by git-cvsserver, independent of | |
181 | access method and requested operation. | |
182 | ||
183 | That means that even if you offer only read access (e.g. by using | |
febe7dcc FL |
184 | the pserver method), git-cvsserver should have write access to |
185 | the database to work reliably (otherwise you need to make sure | |
186 | that the database if up-to-date all the time git-cvsserver is run). | |
187 | ||
188 | By default it uses SQLite databases in the git directory, named | |
189 | `gitcvs.<module_name>.sqlite`. Note that the SQLite backend creates | |
190 | temporary files in the same directory as the database file on | |
191 | write so it might not be enough to grant the users using | |
192 | git-cvsserver write access to the database file without granting | |
0f76a543 | 193 | them write access to the directory, too. |
febe7dcc FL |
194 | |
195 | You can configure the database backend with the following | |
196 | configuration variables: | |
197 | ||
198 | Configuring database backend | |
199 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
200 | ||
201 | git-cvsserver uses the Perl DBI module. Please also read | |
202 | its documentation if changing these variables, especially | |
203 | about `DBI->connect()`. | |
204 | ||
205 | gitcvs.dbname:: | |
206 | Database name. The exact meaning depends on the | |
207 | used database driver, for SQLite this is a filename. | |
208 | Supports variable substitution (see below). May | |
209 | not contain semicolons (`;`). | |
210 | Default: '%Ggitcvs.%m.sqlite' | |
211 | ||
212 | gitcvs.dbdriver:: | |
213 | Used DBI driver. You can specify any available driver | |
214 | for this here, but it might not work. cvsserver is tested | |
215 | with 'DBD::SQLite', reported to work with | |
216 | 'DBD::Pg', and reported *not* to work with 'DBD::mysql'. | |
217 | Please regard this as an experimental feature. May not | |
218 | contain double colons (`:`). | |
219 | Default: 'SQLite' | |
220 | ||
221 | gitcvs.dbuser:: | |
222 | Database user. Only useful if setting `dbdriver`, since | |
223 | SQLite has no concept of database users. Supports variable | |
224 | substitution (see below). | |
225 | ||
226 | gitcvs.dbpass:: | |
227 | Database password. Only useful if setting `dbdriver`, since | |
228 | SQLite has no concept of database passwords. | |
229 | ||
230 | All variables can also be set per access method, see <<configaccessmethod,above>>. | |
231 | ||
232 | Variable substitution | |
233 | ^^^^^^^^^^^^^^^^^^^^^ | |
234 | In `dbdriver` and `dbuser` you can use the following variables: | |
235 | ||
236 | %G:: | |
237 | git directory name | |
238 | %g:: | |
239 | git directory name, where all characters except for | |
240 | alpha-numeric ones, `.`, and `-` are replaced with | |
241 | `_` (this should make it easier to use the directory | |
242 | name in a filename if wanted) | |
243 | %m:: | |
244 | CVS module/git head name | |
245 | %a:: | |
246 | access method (one of "ext" or "pserver") | |
247 | %u:: | |
248 | Name of the user running git-cvsserver. | |
249 | If no name can be determined, the | |
250 | numeric uid is used. | |
251 | ||
ee75d4cd ML |
252 | Eclipse CVS Client Notes |
253 | ------------------------ | |
254 | ||
255 | To get a checkout with the Eclipse CVS client: | |
256 | ||
b30cc0da ML |
257 | 1. Select "Create a new project -> From CVS checkout" |
258 | 2. Create a new location. See the notes below for details on how to choose the | |
259 | right protocol. | |
260 | 3. Browse the 'modules' available. It will give you a list of the heads in | |
261 | the repository. You will not be able to browse the tree from there. Only | |
262 | the heads. | |
263 | 4. Pick 'HEAD' when it asks what branch/tag to check out. Untick the | |
264 | "launch commit wizard" to avoid committing the .project file. | |
265 | ||
abda1ef5 | 266 | Protocol notes: If you are using anonymous access via pserver, just select that. |
b30cc0da ML |
267 | Those using SSH access should choose the 'ext' protocol, and configure 'ext' |
268 | access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to | |
e94a4f6e | 269 | 'git-cvsserver'. Note that password support is not good when using 'ext', |
b30cc0da ML |
270 | you will definitely want to have SSH keys setup. |
271 | ||
272 | Alternatively, you can just use the non-standard extssh protocol that Eclipse | |
273 | offer. In that case CVS_SERVER is ignored, and you will have to replace | |
e94a4f6e | 274 | the cvs utility on the server with git-cvsserver or manipulate your `.bashrc` |
b30cc0da | 275 | so that calling 'cvs' effectively calls git-cvsserver. |
ee75d4cd ML |
276 | |
277 | Clients known to work | |
278 | --------------------- | |
279 | ||
ad0f8c9e FL |
280 | - CVS 1.12.9 on Debian |
281 | - CVS 1.11.17 on MacOSX (from Fink package) | |
282 | - Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes) | |
283 | - TortoiseCVS | |
ee75d4cd | 284 | |
3fda8c4c ML |
285 | Operations supported |
286 | -------------------- | |
287 | ||
288 | All the operations required for normal use are supported, including | |
289 | checkout, diff, status, update, log, add, remove, commit. | |
290 | Legacy monitoring operations are not supported (edit, watch and related). | |
291 | Exports and tagging (tags and branches) are not supported at this stage. | |
292 | ||
e94a4f6e | 293 | The server should set the '-k' mode to binary when relevant, however, |
d8b6a1a1 | 294 | this is not really implemented yet. For now, you can force the server |
e94a4f6e | 295 | to set '-kb' for all files by setting the `gitcvs.allbinary` config |
d8b6a1a1 FL |
296 | variable. In proper GIT tradition, the contents of the files are |
297 | always respected. No keyword expansion or newline munging is supported. | |
3fda8c4c ML |
298 | |
299 | Dependencies | |
300 | ------------ | |
301 | ||
302 | git-cvsserver depends on DBD::SQLite. | |
303 | ||
304 | Copyright and Authors | |
305 | --------------------- | |
306 | ||
307 | This program is copyright The Open University UK - 2006. | |
308 | ||
ad0f8c9e FL |
309 | Authors: |
310 | ||
311 | - Martyn Smith <martyn@catalyst.net.nz> | |
312 | - Martin Langhoff <martin@catalyst.net.nz> | |
313 | ||
314 | with ideas and patches from participants of the git-list <git@vger.kernel.org>. | |
3fda8c4c ML |
315 | |
316 | Documentation | |
317 | -------------- | |
ad0f8c9e | 318 | Documentation by Martyn Smith <martyn@catalyst.net.nz>, Martin Langhoff <martin@catalyst.net.nz>, and Matthias Urlichs <smurf@smurf.noris.de>. |
3fda8c4c ML |
319 | |
320 | GIT | |
321 | --- | |
322 | Part of the gitlink:git[7] suite |