Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 1 | git-cvsserver(1) |
| 2 | ================ |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 6 | git-cvsserver - A CVS server emulator for Git |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 7 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 8 | SYNOPSIS |
| 9 | -------- |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 10 | |
| 11 | SSH: |
| 12 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 13 | [verse] |
Junio C Hamano | 7c2d9ea | 2008-08-19 09:01:44 | [diff] [blame] | 14 | export CVS_SERVER="git cvsserver" |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 15 | 'cvs' -d :ext:user@server/path/repo.git co <HEAD_name> |
| 16 | |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 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] |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 25 | 'git-cvsserver' [options] [pserver|server] [<directory> ...] |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 26 | |
| 27 | OPTIONS |
| 28 | ------- |
| 29 | |
| 30 | All these options obviously only make sense if enforced by the server side. |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 31 | They have been implemented to resemble the linkgit:git-daemon[1] options as |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 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:: |
| 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. |
| 43 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 44 | -V:: |
| 45 | --version:: |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 46 | Print version information and exit |
| 47 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 48 | -h:: |
| 49 | -H:: |
| 50 | --help:: |
Junio C Hamano | 6926bef | 2007-06-16 09:54:05 | [diff] [blame] | 51 | Print usage information and exit |
| 52 | |
| 53 | <directory>:: |
| 54 | You can specify a list of allowed directories. If no directories |
| 55 | are given, all are allowed. This is an additional restriction, gitcvs |
| 56 | access still needs to be enabled by the `gitcvs.enabled` config option |
| 57 | unless '--export-all' was given, too. |
| 58 | |
| 59 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 60 | DESCRIPTION |
| 61 | ----------- |
| 62 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 63 | This application is a CVS emulation layer for Git. |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 64 | |
| 65 | It is highly functional. However, not all methods are implemented, |
| 66 | and for those methods that are implemented, |
| 67 | not all switches are implemented. |
| 68 | |
| 69 | Testing has been done using both the CLI CVS client, and the Eclipse CVS |
| 70 | plugin. Most functionality works fine with both of these clients. |
| 71 | |
| 72 | LIMITATIONS |
| 73 | ----------- |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 74 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 75 | CVS clients cannot tag, branch or perform Git merges. |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 76 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 77 | 'git-cvsserver' maps Git branches to CVS modules. This is very different |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 78 | from what most CVS users would expect since in CVS modules usually represent |
| 79 | one or more directories. |
| 80 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 81 | INSTALLATION |
| 82 | ------------ |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 83 | |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 84 | 1. If you are going to offer CVS access via pserver, add a line in |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 85 | /etc/inetd.conf like |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 86 | + |
| 87 | -- |
| 88 | ------ |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 89 | cvspserver stream tcp nowait nobody git-cvsserver pserver |
| 90 | |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 91 | ------ |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 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 |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 96 | |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 97 | ------ |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 98 | cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 99 | |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 100 | ------ |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 101 | |
| 102 | Only anonymous access is provided by pserve by default. To commit you |
| 103 | will have to create pserver accounts, simply add a gitcvs.authdb |
| 104 | setting in the config file of the repositories you want the cvsserver |
| 105 | to allow writes to, for example: |
| 106 | |
| 107 | ------ |
| 108 | |
| 109 | [gitcvs] |
| 110 | authdb = /etc/cvsserver/passwd |
| 111 | |
| 112 | ------ |
| 113 | The format of these files is username followed by the crypted password, |
| 114 | for example: |
| 115 | |
| 116 | ------ |
| 117 | myuser:$1Oyx5r9mdGZ2 |
| 118 | myuser:$1$BA)@$vbnMJMDym7tA32AamXrm./ |
| 119 | ------ |
| 120 | You can use the 'htpasswd' facility that comes with Apache to make these |
| 121 | files, but Apache's MD5 crypt method differs from the one used by most C |
| 122 | library's crypt() function, so don't use the -m option. |
| 123 | |
| 124 | Alternatively you can produce the password with perl's crypt() operator: |
| 125 | ----- |
| 126 | perl -e 'my ($user, $pass) = @ARGV; printf "%s:%s\n", $user, crypt($user, $pass)' $USER password |
| 127 | ----- |
| 128 | |
| 129 | Then provide your password via the pserver method, for example: |
| 130 | ------ |
| 131 | cvs -d:pserver:someuser:somepassword <at> server/path/repo.git co <HEAD_name> |
| 132 | ------ |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 133 | No special setup is needed for SSH access, other than having Git tools |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 134 | in the PATH. If you have clients that do not accept the CVS_SERVER |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 135 | environment variable, you can rename 'git-cvsserver' to `cvs`. |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 136 | |
Junio C Hamano | a638742 | 2007-08-25 03:54:27 | [diff] [blame] | 137 | Note: Newer CVS versions (>= 1.12.11) also support specifying |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 138 | CVS_SERVER directly in CVSROOT like |
| 139 | |
| 140 | ------ |
Junio C Hamano | 7c2d9ea | 2008-08-19 09:01:44 | [diff] [blame] | 141 | cvs -d ":ext;CVS_SERVER=git cvsserver:user@server/path/repo.git" co <HEAD_name> |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 142 | ------ |
| 143 | This has the advantage that it will be saved in your 'CVS/Root' files and |
| 144 | you don't need to worry about always setting the correct environment |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 145 | variable. SSH users restricted to 'git-shell' don't need to override the default |
| 146 | with CVS_SERVER (and shouldn't) as 'git-shell' understands `cvs` to mean |
| 147 | 'git-cvsserver' and pretends that the other end runs the real 'cvs' better. |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 148 | -- |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 149 | 2. For each repo that you want accessible from CVS you need to edit config in |
| 150 | the repo and add the following section. |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 151 | + |
| 152 | -- |
| 153 | ------ |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 154 | [gitcvs] |
| 155 | enabled=1 |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 156 | # optional for debugging |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 157 | logfile=/path/to/logfile |
| 158 | |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 159 | ------ |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 160 | Note: you need to ensure each user that is going to invoke 'git-cvsserver' has |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 161 | write access to the log file and to the database (see |
| 162 | <<dbbackend,Database Backend>>. If you want to offer write access over |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 163 | SSH, the users of course also need write access to the Git repository itself. |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 164 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 165 | You also need to ensure that each repository is "bare" (without a Git index |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 166 | file) for `cvs commit` to work. See linkgit:gitcvs-migration[7]. |
| 167 | |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 168 | [[configaccessmethod]] |
Junio C Hamano | 591dc6a | 2007-05-29 09:18:19 | [diff] [blame] | 169 | All configuration variables can also be overridden for a specific method of |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 170 | access. Valid method names are "ext" (for SSH access) and "pserver". The |
| 171 | following example configuration would disable pserver access while still |
| 172 | allowing access over SSH. |
| 173 | ------ |
| 174 | [gitcvs] |
| 175 | enabled=0 |
| 176 | |
| 177 | [gitcvs "ext"] |
| 178 | enabled=1 |
| 179 | ------ |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 180 | -- |
Junio C Hamano | 33f9843 | 2008-04-16 09:10:05 | [diff] [blame] | 181 | 3. If you didn't specify the CVSROOT/CVS_SERVER directly in the checkout command, |
| 182 | automatically saving it in your 'CVS/Root' files, then you need to set them |
| 183 | explicitly in your environment. CVSROOT should be set as per normal, but the |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 184 | directory should point at the appropriate Git repo. As above, for SSH clients |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 185 | _not_ restricted to 'git-shell', CVS_SERVER should be set to 'git-cvsserver'. |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 186 | + |
| 187 | -- |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 188 | ------ |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 189 | export CVSROOT=:ext:user@server:/var/git/project.git |
Junio C Hamano | 7c2d9ea | 2008-08-19 09:01:44 | [diff] [blame] | 190 | export CVS_SERVER="git cvsserver" |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 191 | ------ |
| 192 | -- |
Junio C Hamano | 33f9843 | 2008-04-16 09:10:05 | [diff] [blame] | 193 | 4. For SSH clients that will make commits, make sure their server-side |
| 194 | .ssh/environment files (or .bashrc, etc., according to their specific shell) |
| 195 | export appropriate values for GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, |
| 196 | GIT_COMMITTER_NAME, and GIT_COMMITTER_EMAIL. For SSH clients whose login |
| 197 | shell is bash, .bashrc may be a reasonable alternative. |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 198 | |
| 199 | 5. Clients should now be able to check out the project. Use the CVS 'module' |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 200 | name to indicate what Git 'head' you want to check out. This also sets the |
Junio C Hamano | 33f9843 | 2008-04-16 09:10:05 | [diff] [blame] | 201 | name of your newly checked-out directory, unless you tell it otherwise with |
| 202 | `-d <dir_name>`. For example, this checks out 'master' branch to the |
| 203 | `project-master` directory: |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 204 | + |
| 205 | ------ |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 206 | cvs co -d project-master master |
Junio C Hamano | f1d1480 | 2006-06-08 00:48:17 | [diff] [blame] | 207 | ------ |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 208 | |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 209 | [[dbbackend]] |
| 210 | Database Backend |
| 211 | ---------------- |
| 212 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 213 | 'git-cvsserver' uses one database per Git head (i.e. CVS module) to |
Junio C Hamano | 9df0c66 | 2009-11-23 11:09:27 | [diff] [blame] | 214 | store information about the repository to maintain consistent |
| 215 | CVS revision numbers. The database needs to be |
| 216 | updated (i.e. written to) after every commit. |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 217 | |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 218 | If the commit is done directly by using `git` (as opposed to |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 219 | using 'git-cvsserver') the update will need to happen on the |
| 220 | next repository access by 'git-cvsserver', independent of |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 221 | access method and requested operation. |
| 222 | |
| 223 | That means that even if you offer only read access (e.g. by using |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 224 | the pserver method), 'git-cvsserver' should have write access to |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 225 | the database to work reliably (otherwise you need to make sure |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 226 | that the database is up-to-date any time 'git-cvsserver' is executed). |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 227 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 228 | By default it uses SQLite databases in the Git directory, named |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 229 | `gitcvs.<module_name>.sqlite`. Note that the SQLite backend creates |
| 230 | temporary files in the same directory as the database file on |
| 231 | write so it might not be enough to grant the users using |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 232 | 'git-cvsserver' write access to the database file without granting |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 233 | them write access to the directory, too. |
| 234 | |
Junio C Hamano | 9df0c66 | 2009-11-23 11:09:27 | [diff] [blame] | 235 | The database can not be reliably regenerated in a |
| 236 | consistent form after the branch it is tracking has changed. |
| 237 | Example: For merged branches, 'git-cvsserver' only tracks |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 238 | one branch of development, and after a 'git merge' an |
Junio C Hamano | 9df0c66 | 2009-11-23 11:09:27 | [diff] [blame] | 239 | incrementally updated database may track a different branch |
| 240 | than a database regenerated from scratch, causing inconsistent |
| 241 | CVS revision numbers. `git-cvsserver` has no way of knowing which |
| 242 | branch it would have picked if it had been run incrementally |
| 243 | pre-merge. So if you have to fully or partially (from old |
| 244 | backup) regenerate the database, you should be suspicious |
| 245 | of pre-existing CVS sandboxes. |
| 246 | |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 247 | You can configure the database backend with the following |
| 248 | configuration variables: |
| 249 | |
| 250 | Configuring database backend |
| 251 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 252 | |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 253 | 'git-cvsserver' uses the Perl DBI module. Please also read |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 254 | its documentation if changing these variables, especially |
Junio C Hamano | b76a686 | 2012-05-02 22:02:46 | [diff] [blame] | 255 | about `DBI->connect()`. |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 256 | |
| 257 | gitcvs.dbname:: |
| 258 | Database name. The exact meaning depends on the |
Junio C Hamano | 1f51196 | 2008-01-30 08:28:52 | [diff] [blame] | 259 | selected database driver, for SQLite this is a filename. |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 260 | Supports variable substitution (see below). May |
| 261 | not contain semicolons (`;`). |
| 262 | Default: '%Ggitcvs.%m.sqlite' |
| 263 | |
| 264 | gitcvs.dbdriver:: |
| 265 | Used DBI driver. You can specify any available driver |
| 266 | for this here, but it might not work. cvsserver is tested |
| 267 | with 'DBD::SQLite', reported to work with |
| 268 | 'DBD::Pg', and reported *not* to work with 'DBD::mysql'. |
| 269 | Please regard this as an experimental feature. May not |
Junio C Hamano | 1f51196 | 2008-01-30 08:28:52 | [diff] [blame] | 270 | contain colons (`:`). |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 271 | Default: 'SQLite' |
| 272 | |
| 273 | gitcvs.dbuser:: |
| 274 | Database user. Only useful if setting `dbdriver`, since |
| 275 | SQLite has no concept of database users. Supports variable |
| 276 | substitution (see below). |
| 277 | |
| 278 | gitcvs.dbpass:: |
| 279 | Database password. Only useful if setting `dbdriver`, since |
| 280 | SQLite has no concept of database passwords. |
| 281 | |
Junio C Hamano | a74efce | 2008-04-02 08:39:08 | [diff] [blame] | 282 | gitcvs.dbTableNamePrefix:: |
| 283 | Database table name prefix. Supports variable substitution |
| 284 | (see below). Any non-alphabetic characters will be replaced |
| 285 | with underscores. |
| 286 | |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 287 | All variables can also be set per access method, see <<configaccessmethod,above>>. |
| 288 | |
| 289 | Variable substitution |
| 290 | ^^^^^^^^^^^^^^^^^^^^^ |
| 291 | In `dbdriver` and `dbuser` you can use the following variables: |
| 292 | |
| 293 | %G:: |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 294 | Git directory name |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 295 | %g:: |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 296 | Git directory name, where all characters except for |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 297 | alpha-numeric ones, `.`, and `-` are replaced with |
| 298 | `_` (this should make it easier to use the directory |
| 299 | name in a filename if wanted) |
| 300 | %m:: |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 301 | CVS module/Git head name |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 302 | %a:: |
| 303 | access method (one of "ext" or "pserver") |
| 304 | %u:: |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 305 | Name of the user running 'git-cvsserver'. |
Junio C Hamano | a2ad99e | 2007-04-18 09:57:04 | [diff] [blame] | 306 | If no name can be determined, the |
| 307 | numeric uid is used. |
| 308 | |
Junio C Hamano | b141a92 | 2010-01-10 19:55:14 | [diff] [blame] | 309 | ENVIRONMENT |
| 310 | ----------- |
| 311 | |
| 312 | These variables obviate the need for command-line options in some |
| 313 | circumstances, allowing easier restricted usage through git-shell. |
| 314 | |
| 315 | GIT_CVSSERVER_BASE_PATH takes the place of the argument to --base-path. |
| 316 | |
| 317 | GIT_CVSSERVER_ROOT specifies a single-directory whitelist. The |
| 318 | repository must still be configured to allow access through |
| 319 | git-cvsserver, as described above. |
| 320 | |
| 321 | When these environment variables are set, the corresponding |
| 322 | command-line arguments may not be used. |
| 323 | |
Junio C Hamano | 9512fcf | 2006-03-01 12:05:14 | [diff] [blame] | 324 | Eclipse CVS Client Notes |
| 325 | ------------------------ |
| 326 | |
| 327 | To get a checkout with the Eclipse CVS client: |
| 328 | |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 329 | 1. Select "Create a new project -> From CVS checkout" |
| 330 | 2. Create a new location. See the notes below for details on how to choose the |
| 331 | right protocol. |
| 332 | 3. Browse the 'modules' available. It will give you a list of the heads in |
| 333 | the repository. You will not be able to browse the tree from there. Only |
| 334 | the heads. |
| 335 | 4. Pick 'HEAD' when it asks what branch/tag to check out. Untick the |
| 336 | "launch commit wizard" to avoid committing the .project file. |
Junio C Hamano | 9512fcf | 2006-03-01 12:05:14 | [diff] [blame] | 337 | |
Junio C Hamano | 341071d | 2006-06-04 07:24:48 | [diff] [blame] | 338 | Protocol notes: If you are using anonymous access via pserver, just select that. |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 339 | Those using SSH access should choose the 'ext' protocol, and configure 'ext' |
| 340 | access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 341 | "`git cvsserver`". Note that password support is not good when using 'ext', |
Junio C Hamano | decf50e | 2006-03-05 10:51:14 | [diff] [blame] | 342 | you will definitely want to have SSH keys setup. |
| 343 | |
| 344 | Alternatively, you can just use the non-standard extssh protocol that Eclipse |
| 345 | offer. In that case CVS_SERVER is ignored, and you will have to replace |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 346 | the cvs utility on the server with 'git-cvsserver' or manipulate your `.bashrc` |
| 347 | so that calling 'cvs' effectively calls 'git-cvsserver'. |
Junio C Hamano | 9512fcf | 2006-03-01 12:05:14 | [diff] [blame] | 348 | |
| 349 | Clients known to work |
| 350 | --------------------- |
| 351 | |
Junio C Hamano | 103ad7f | 2007-03-14 11:19:26 | [diff] [blame] | 352 | - CVS 1.12.9 on Debian |
| 353 | - CVS 1.11.17 on MacOSX (from Fink package) |
| 354 | - Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes) |
| 355 | - TortoiseCVS |
Junio C Hamano | 9512fcf | 2006-03-01 12:05:14 | [diff] [blame] | 356 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 357 | Operations supported |
| 358 | -------------------- |
| 359 | |
| 360 | All the operations required for normal use are supported, including |
| 361 | checkout, diff, status, update, log, add, remove, commit. |
Junio C Hamano | 36d5229 | 2013-01-25 21:32:36 | [diff] [blame] | 362 | |
| 363 | Most CVS command arguments that read CVS tags or revision numbers |
| 364 | (typically -r) work, and also support any git refspec |
| 365 | (tag, branch, commit ID, etc). |
| 366 | However, CVS revision numbers for non-default branches are not well |
| 367 | emulated, and cvs log does not show tags or branches at |
| 368 | all. (Non-main-branch CVS revision numbers superficially resemble CVS |
| 369 | revision numbers, but they actually encode a git commit ID directly, |
| 370 | rather than represent the number of revisions since the branch point.) |
| 371 | |
| 372 | Note that there are two ways to checkout a particular branch. |
| 373 | As described elsewhere on this page, the "module" parameter |
| 374 | of cvs checkout is interpreted as a branch name, and it becomes |
| 375 | the main branch. It remains the main branch for a given sandbox |
| 376 | even if you temporarily make another branch sticky with |
| 377 | cvs update -r. Alternatively, the -r argument can indicate |
| 378 | some other branch to actually checkout, even though the module |
| 379 | is still the "main" branch. Tradeoffs (as currently |
| 380 | implemented): Each new "module" creates a new database on disk with |
| 381 | a history for the given module, and after the database is created, |
| 382 | operations against that main branch are fast. Or alternatively, |
| 383 | -r doesn't take any extra disk space, but may be significantly slower for |
| 384 | many operations, like cvs update. |
| 385 | |
| 386 | If you want to refer to a git refspec that has characters that are |
| 387 | not allowed by CVS, you have two options. First, it may just work |
| 388 | to supply the git refspec directly to the appropriate CVS -r argument; |
| 389 | some CVS clients don't seem to do much sanity checking of the argument. |
| 390 | Second, if that fails, you can use a special character escape mechanism |
| 391 | that only uses characters that are valid in CVS tags. A sequence |
| 392 | of 4 or 5 characters of the form (underscore (`"_"`), dash (`"-"`), |
| 393 | one or two characters, and dash (`"-"`)) can encode various characters based |
| 394 | on the one or two letters: `"s"` for slash (`"/"`), `"p"` for |
| 395 | period (`"."`), `"u"` for underscore (`"_"`), or two hexadecimal digits |
| 396 | for any byte value at all (typically an ASCII number, or perhaps a part |
| 397 | of a UTF-8 encoded character). |
| 398 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 399 | Legacy monitoring operations are not supported (edit, watch and related). |
| 400 | Exports and tagging (tags and branches) are not supported at this stage. |
| 401 | |
Junio C Hamano | dfccbb0 | 2008-05-26 01:16:14 | [diff] [blame] | 402 | CRLF Line Ending Conversions |
| 403 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 404 | |
| 405 | By default the server leaves the '-k' mode blank for all files, |
Junio C Hamano | 619596a | 2010-08-18 22:15:35 | [diff] [blame] | 406 | which causes the CVS client to treat them as a text files, subject |
| 407 | to end-of-line conversion on some platforms. |
Junio C Hamano | dfccbb0 | 2008-05-26 01:16:14 | [diff] [blame] | 408 | |
Junio C Hamano | bb88cf4 | 2010-06-21 15:23:55 | [diff] [blame] | 409 | You can make the server use the end-of-line conversion attributes to |
| 410 | set the '-k' modes for files by setting the `gitcvs.usecrlfattr` |
| 411 | config variable. See linkgit:gitattributes[5] for more information |
| 412 | about end-of-line conversion. |
Junio C Hamano | dfccbb0 | 2008-05-26 01:16:14 | [diff] [blame] | 413 | |
| 414 | Alternatively, if `gitcvs.usecrlfattr` config is not enabled |
Junio C Hamano | bb88cf4 | 2010-06-21 15:23:55 | [diff] [blame] | 415 | or the attributes do not allow automatic detection for a filename, then |
Junio C Hamano | dfccbb0 | 2008-05-26 01:16:14 | [diff] [blame] | 416 | the server uses the `gitcvs.allbinary` config for the default setting. |
| 417 | If `gitcvs.allbinary` is set, then file not otherwise |
| 418 | specified will default to '-kb' mode. Otherwise the '-k' mode |
| 419 | is left blank. But if `gitcvs.allbinary` is set to "guess", then |
| 420 | the correct '-k' mode will be guessed based on the contents of |
| 421 | the file. |
| 422 | |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 423 | For best consistency with 'cvs', it is probably best to override the |
Junio C Hamano | dfccbb0 | 2008-05-26 01:16:14 | [diff] [blame] | 424 | defaults by setting `gitcvs.usecrlfattr` to true, |
| 425 | and `gitcvs.allbinary` to "guess". |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 426 | |
| 427 | Dependencies |
| 428 | ------------ |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 429 | 'git-cvsserver' depends on DBD::SQLite. |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 430 | |
Junio C Hamano | 34b1811 | 2006-02-23 11:21:40 | [diff] [blame] | 431 | GIT |
| 432 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 433 | Part of the linkgit:git[1] suite |