Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 1 | git-cvsserver(1) |
| 2 | ================ |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 6 | git-cvsserver - A CVS server emulator for Git |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 7 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 8 | SYNOPSIS |
| 9 | -------- |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 10 | |
| 11 | SSH: |
| 12 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 13 | [verse] |
Robert Schiele | da9973c | 2008-08-18 16:17:04 +0200 | [diff] [blame] | 14 | export CVS_SERVER="git cvsserver" |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 15 | 'cvs' -d :ext:user@server/path/repo.git co <HEAD_name> |
| 16 | |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [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] |
Robert P. J. Day | de61305 | 2018-05-24 16:11:39 -0400 | [diff] [blame] | 25 | 'git-cvsserver' [<options>] [pserver|server] [<directory> ...] |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 26 | |
Ævar Arnfjörð Bjarmason | 414abf1 | 2021-04-09 17:02:50 +0200 | [diff] [blame] | 27 | DESCRIPTION |
| 28 | ----------- |
| 29 | |
| 30 | This application is a CVS emulation layer for Git. |
| 31 | |
| 32 | It is highly functional. However, not all methods are implemented, |
| 33 | and for those methods that are implemented, |
| 34 | not all switches are implemented. |
| 35 | |
| 36 | Testing has been done using both the CLI CVS client, and the Eclipse CVS |
| 37 | plugin. Most functionality works fine with both of these clients. |
| 38 | |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 39 | OPTIONS |
| 40 | ------- |
| 41 | |
| 42 | All these options obviously only make sense if enforced by the server side. |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 43 | They have been implemented to resemble the linkgit:git-daemon[1] options as |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 44 | closely as possible. |
| 45 | |
| 46 | --base-path <path>:: |
| 47 | Prepend 'path' to requested CVSROOT |
| 48 | |
| 49 | --strict-paths:: |
| 50 | Don't allow recursing into subdirectories |
| 51 | |
| 52 | --export-all:: |
Frank Lichtenheld | 226bccb | 2007-06-15 03:01:53 +0200 | [diff] [blame] | 53 | Don't check for `gitcvs.enabled` in config. You also have to specify a list |
| 54 | of allowed directories (see below) if you want to use this option. |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 55 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 56 | -V:: |
| 57 | --version:: |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 58 | Print version information and exit |
| 59 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 60 | -h:: |
| 61 | -H:: |
| 62 | --help:: |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 63 | Print usage information and exit |
| 64 | |
| 65 | <directory>:: |
| 66 | You can specify a list of allowed directories. If no directories |
| 67 | are given, all are allowed. This is an additional restriction, gitcvs |
| 68 | access still needs to be enabled by the `gitcvs.enabled` config option |
Matthieu Moy | bcf9626 | 2016-06-28 13:40:11 +0200 | [diff] [blame] | 69 | unless `--export-all` was given, too. |
Frank Lichtenheld | 693b632 | 2007-06-07 16:57:01 +0200 | [diff] [blame] | 70 | |
| 71 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 72 | LIMITATIONS |
| 73 | ----------- |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 74 | |
Thomas Ackermann | 48a8c26 | 2013-01-21 20:16:20 +0100 | [diff] [blame] | 75 | CVS clients cannot tag, branch or perform Git merges. |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 76 | |
Thomas Ackermann | 48a8c26 | 2013-01-21 20:16:20 +0100 | [diff] [blame] | 77 | 'git-cvsserver' maps Git branches to CVS modules. This is very different |
Frank Lichtenheld | b247570 | 2007-04-12 16:54:28 +0200 | [diff] [blame] | 78 | from what most CVS users would expect since in CVS modules usually represent |
| 79 | one or more directories. |
| 80 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 81 | INSTALLATION |
| 82 | ------------ |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 83 | |
Ævar Arnfjörð Bjarmason | 031a027 | 2010-05-15 15:06:46 +0000 | [diff] [blame] | 84 | 1. If you are going to offer CVS access via pserver, add a line in |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 85 | /etc/inetd.conf like |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 86 | + |
| 87 | -- |
| 88 | ------ |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 89 | cvspserver stream tcp nowait nobody git-cvsserver pserver |
| 90 | |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 91 | ------ |
Frank Lichtenheld | 893c365 | 2007-05-27 14:33:06 +0200 | [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 |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 96 | |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 97 | ------ |
Frank Lichtenheld | 893c365 | 2007-05-27 14:33:06 +0200 | [diff] [blame] | 98 | cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 99 | |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 100 | ------ |
Ævar Arnfjörð Bjarmason | 031a027 | 2010-05-15 15:06:46 +0000 | [diff] [blame] | 101 | |
| 102 | Only anonymous access is provided by pserve by default. To commit you |
Sam Vilain | c057bad | 2010-05-15 15:07:54 +0000 | [diff] [blame] | 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: |
Ævar Arnfjörð Bjarmason | 031a027 | 2010-05-15 15:06:46 +0000 | [diff] [blame] | 106 | |
| 107 | ------ |
| 108 | |
Sam Vilain | c057bad | 2010-05-15 15:07:54 +0000 | [diff] [blame] | 109 | [gitcvs] |
| 110 | authdb = /etc/cvsserver/passwd |
Ævar Arnfjörð Bjarmason | 031a027 | 2010-05-15 15:06:46 +0000 | [diff] [blame] | 111 | |
| 112 | ------ |
Thomas Ackermann | f745acb | 2014-11-03 21:37:07 +0100 | [diff] [blame] | 113 | The format of these files is username followed by the encrypted password, |
Sam Vilain | c057bad | 2010-05-15 15:07:54 +0000 | [diff] [blame] | 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 | |
Ævar Arnfjörð Bjarmason | 70d5dd1 | 2010-05-15 02:46:03 +0000 | [diff] [blame] | 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 | |
Ævar Arnfjörð Bjarmason | 031a027 | 2010-05-15 15:06:46 +0000 | [diff] [blame] | 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 | ------ |
Thomas Ackermann | 48a8c26 | 2013-01-21 20:16:20 +0100 | [diff] [blame] | 133 | No special setup is needed for SSH access, other than having Git tools |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 134 | in the PATH. If you have clients that do not accept the CVS_SERVER |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 135 | environment variable, you can rename 'git-cvsserver' to `cvs`. |
Frank Lichtenheld | 5484289 | 2007-05-27 14:33:07 +0200 | [diff] [blame] | 136 | |
Brian Hetro | db21872 | 2007-08-23 20:40:08 -0400 | [diff] [blame] | 137 | Note: Newer CVS versions (>= 1.12.11) also support specifying |
Frank Lichtenheld | 5484289 | 2007-05-27 14:33:07 +0200 | [diff] [blame] | 138 | CVS_SERVER directly in CVSROOT like |
| 139 | |
| 140 | ------ |
Robert Schiele | da9973c | 2008-08-18 16:17:04 +0200 | [diff] [blame] | 141 | cvs -d ":ext;CVS_SERVER=git cvsserver:user@server/path/repo.git" co <HEAD_name> |
Frank Lichtenheld | 5484289 | 2007-05-27 14:33:07 +0200 | [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 |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [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 |
Jonathan Nieder | 2fd02c9 | 2008-07-03 00:55:07 -0500 | [diff] [blame] | 147 | 'git-cvsserver' and pretends that the other end runs the real 'cvs' better. |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 148 | -- |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [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. |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 151 | + |
| 152 | -- |
| 153 | ------ |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 154 | [gitcvs] |
| 155 | enabled=1 |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 156 | # optional for debugging |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 157 | logFile=/path/to/logfile |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 158 | |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 159 | ------ |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 160 | Note: you need to ensure each user that is going to invoke 'git-cvsserver' has |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [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 |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 163 | SSH, the users of course also need write access to the Git repository itself. |
Frank Lichtenheld | d55820c | 2007-03-19 16:55:59 +0100 | [diff] [blame] | 164 | |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 165 | You also need to ensure that each repository is "bare" (without a Git index |
Matthew Ogilvie | a41a32b | 2008-07-04 22:43:41 -0600 | [diff] [blame] | 166 | file) for `cvs commit` to work. See linkgit:gitcvs-migration[7]. |
| 167 | |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 168 | [[configaccessmethod]] |
Frank Lichtenheld | a192a90 | 2007-05-27 14:33:08 +0200 | [diff] [blame] | 169 | All configuration variables can also be overridden for a specific method of |
Frank Lichtenheld | d55820c | 2007-03-19 16:55:59 +0100 | [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 | ------ |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 180 | -- |
Scott Collins | 2c2d02a | 2008-04-15 17:44:43 -0400 | [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 |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 184 | directory should point at the appropriate Git repo. As above, for SSH clients |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 185 | _not_ restricted to 'git-shell', CVS_SERVER should be set to 'git-cvsserver'. |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 186 | + |
| 187 | -- |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 188 | ------ |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 189 | export CVSROOT=:ext:user@server:/var/git/project.git |
Robert Schiele | da9973c | 2008-08-18 16:17:04 +0200 | [diff] [blame] | 190 | export CVS_SERVER="git cvsserver" |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 191 | ------ |
| 192 | -- |
Scott Collins | 2c2d02a | 2008-04-15 17:44:43 -0400 | [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. |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 198 | |
| 199 | 5. Clients should now be able to check out the project. Use the CVS 'module' |
Thomas Ackermann | 48a8c26 | 2013-01-21 20:16:20 +0100 | [diff] [blame] | 200 | name to indicate what Git 'head' you want to check out. This also sets the |
Scott Collins | 2c2d02a | 2008-04-15 17:44:43 -0400 | [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: |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 204 | + |
| 205 | ------ |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 206 | cvs co -d project-master master |
Francis Daly | 0fc8573 | 2006-06-07 23:28:34 +0100 | [diff] [blame] | 207 | ------ |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 208 | |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 209 | [[dbbackend]] |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 210 | DATABASE BACKEND |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 211 | ---------------- |
| 212 | |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 213 | 'git-cvsserver' uses one database per Git head (i.e. CVS module) to |
Matthew Ogilvie | 2fdc0cf | 2009-11-22 19:07:29 -0700 | [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. |
Frank Lichtenheld | 0f76a54 | 2007-04-12 16:43:36 +0200 | [diff] [blame] | 217 | |
Jonathan Nieder | 483bc4f | 2008-06-30 13:56:34 -0500 | [diff] [blame] | 218 | If the commit is done directly by using `git` (as opposed to |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 219 | using 'git-cvsserver') the update will need to happen on the |
| 220 | next repository access by 'git-cvsserver', independent of |
Frank Lichtenheld | 0f76a54 | 2007-04-12 16:43:36 +0200 | [diff] [blame] | 221 | access method and requested operation. |
| 222 | |
| 223 | That means that even if you offer only read access (e.g. by using |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 224 | the pserver method), 'git-cvsserver' should have write access to |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 225 | the database to work reliably (otherwise you need to make sure |
Martin Ågren | 7560f54 | 2017-08-23 19:49:35 +0200 | [diff] [blame] | 226 | that the database is up to date any time 'git-cvsserver' is executed). |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 227 | |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 228 | By default it uses SQLite databases in the Git directory, named |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [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 |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 232 | 'git-cvsserver' write access to the database file without granting |
Frank Lichtenheld | 0f76a54 | 2007-04-12 16:43:36 +0200 | [diff] [blame] | 233 | them write access to the directory, too. |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 234 | |
Mark Rushakoff | 6d16922 | 2019-08-02 22:33:51 -0700 | [diff] [blame] | 235 | The database cannot be reliably regenerated in a |
Matthew Ogilvie | 2fdc0cf | 2009-11-22 19:07:29 -0700 | [diff] [blame] | 236 | consistent form after the branch it is tracking has changed. |
| 237 | Example: For merged branches, 'git-cvsserver' only tracks |
Thomas Rast | 0b444cd | 2010-01-10 00:33:00 +0100 | [diff] [blame] | 238 | one branch of development, and after a 'git merge' an |
Matthew Ogilvie | 2fdc0cf | 2009-11-22 19:07:29 -0700 | [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 | |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 247 | You can configure the database backend with the following |
| 248 | configuration variables: |
| 249 | |
| 250 | Configuring database backend |
| 251 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 252 | |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 253 | 'git-cvsserver' uses the Perl DBI module. Please also read |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 254 | its documentation if changing these variables, especially |
Jeff King | 6cf378f | 2012-04-26 04:51:57 -0400 | [diff] [blame] | 255 | about `DBI->connect()`. |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 256 | |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 257 | gitcvs.dbName:: |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 258 | Database name. The exact meaning depends on the |
Jim Meyering | a5d86f7 | 2008-01-29 20:38:55 +0100 | [diff] [blame] | 259 | selected database driver, for SQLite this is a filename. |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 260 | Supports variable substitution (see below). May |
| 261 | not contain semicolons (`;`). |
| 262 | Default: '%Ggitcvs.%m.sqlite' |
| 263 | |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 264 | gitcvs.dbDriver:: |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 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 |
Jim Meyering | a5d86f7 | 2008-01-29 20:38:55 +0100 | [diff] [blame] | 270 | contain colons (`:`). |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 271 | Default: 'SQLite' |
| 272 | |
| 273 | gitcvs.dbuser:: |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 274 | Database user. Only useful if setting `dbDriver`, since |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 275 | SQLite has no concept of database users. Supports variable |
| 276 | substitution (see below). |
| 277 | |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 278 | gitcvs.dbPass:: |
| 279 | Database password. Only useful if setting `dbDriver`, since |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 280 | SQLite has no concept of database passwords. |
| 281 | |
Josh Elsasser | 6aeeffd | 2008-03-27 14:02:14 -0700 | [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 | |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 287 | All variables can also be set per access method, see <<configaccessmethod,above>>. |
| 288 | |
| 289 | Variable substitution |
| 290 | ^^^^^^^^^^^^^^^^^^^^^ |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 291 | In `dbDriver` and `dbUser` you can use the following variables: |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 292 | |
| 293 | %G:: |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 294 | Git directory name |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 295 | %g:: |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 296 | Git directory name, where all characters except for |
Elijah Newren | 031fd4b | 2019-11-05 17:07:20 +0000 | [diff] [blame] | 297 | alphanumeric ones, `.`, and `-` are replaced with |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 298 | `_` (this should make it easier to use the directory |
| 299 | name in a filename if wanted) |
| 300 | %m:: |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 301 | CVS module/Git head name |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 302 | %a:: |
| 303 | access method (one of "ext" or "pserver") |
| 304 | %u:: |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 305 | Name of the user running 'git-cvsserver'. |
Frank Lichtenheld | febe7dc | 2007-04-07 16:58:10 +0200 | [diff] [blame] | 306 | If no name can be determined, the |
| 307 | numeric uid is used. |
| 308 | |
Phil Miller | 03bd0d6 | 2009-12-30 13:35:31 -0600 | [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 | |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 324 | ECLIPSE CVS CLIENT NOTES |
Martin Langhoff | ee75d4c | 2006-02-24 12:20:51 +1300 | [diff] [blame] | 325 | ------------------------ |
| 326 | |
| 327 | To get a checkout with the Eclipse CVS client: |
| 328 | |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [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. |
Matthieu Moy | 661c3e9 | 2016-06-28 13:40:15 +0200 | [diff] [blame] | 335 | 4. Pick `HEAD` when it asks what branch/tag to check out. Untick the |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [diff] [blame] | 336 | "launch commit wizard" to avoid committing the .project file. |
Martin Langhoff | ee75d4c | 2006-02-24 12:20:51 +1300 | [diff] [blame] | 337 | |
Horst H. von Brand | abda1ef | 2006-06-03 16:27:26 -0400 | [diff] [blame] | 338 | Protocol notes: If you are using anonymous access via pserver, just select that. |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [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 |
Thomas Rast | ca76828 | 2010-01-07 17:49:12 +0100 | [diff] [blame] | 341 | "`git cvsserver`". Note that password support is not good when using 'ext', |
Martin Langhoff | b30cc0d | 2006-03-05 23:11:00 +1300 | [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 |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [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'. |
Martin Langhoff | ee75d4c | 2006-02-24 12:20:51 +1300 | [diff] [blame] | 348 | |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 349 | CLIENTS KNOWN TO WORK |
Martin Langhoff | ee75d4c | 2006-02-24 12:20:51 +1300 | [diff] [blame] | 350 | --------------------- |
| 351 | |
Frank Lichtenheld | ad0f8c9 | 2007-03-13 18:24:26 +0100 | [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 |
Martin Langhoff | ee75d4c | 2006-02-24 12:20:51 +1300 | [diff] [blame] | 356 | |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 357 | OPERATIONS SUPPORTED |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 358 | -------------------- |
| 359 | |
| 360 | All the operations required for normal use are supported, including |
| 361 | checkout, diff, status, update, log, add, remove, commit. |
Matthew Ogilvie | 96bc8f6 | 2012-10-13 23:42:33 -0600 | [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 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [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 | |
Matthew Ogilvie | 8a06a63 | 2008-05-14 22:35:47 -0600 | [diff] [blame] | 402 | CRLF Line Ending Conversions |
Gustaf Hendeby | b592d88 | 2008-05-22 04:28:43 +0200 | [diff] [blame] | 403 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
Matthew Ogilvie | 8a06a63 | 2008-05-14 22:35:47 -0600 | [diff] [blame] | 404 | |
Matthieu Moy | 23f8239 | 2016-06-28 13:40:10 +0200 | [diff] [blame] | 405 | By default the server leaves the `-k` mode blank for all files, |
Ville Skyttä | 6b677a2 | 2010-07-20 00:17:17 +0300 | [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. |
Matthew Ogilvie | 8a06a63 | 2008-05-14 22:35:47 -0600 | [diff] [blame] | 408 | |
Eyvind Bernhardsen | 5ec3e67 | 2010-05-19 22:43:11 +0200 | [diff] [blame] | 409 | You can make the server use the end-of-line conversion attributes to |
Matthieu Moy | 23f8239 | 2016-06-28 13:40:10 +0200 | [diff] [blame] | 410 | set the `-k` modes for files by setting the `gitcvs.usecrlfattr` |
Eyvind Bernhardsen | 5ec3e67 | 2010-05-19 22:43:11 +0200 | [diff] [blame] | 411 | config variable. See linkgit:gitattributes[5] for more information |
| 412 | about end-of-line conversion. |
Matthew Ogilvie | 8a06a63 | 2008-05-14 22:35:47 -0600 | [diff] [blame] | 413 | |
| 414 | Alternatively, if `gitcvs.usecrlfattr` config is not enabled |
Eyvind Bernhardsen | 5ec3e67 | 2010-05-19 22:43:11 +0200 | [diff] [blame] | 415 | or the attributes do not allow automatic detection for a filename, then |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 416 | the server uses the `gitcvs.allBinary` config for the default setting. |
| 417 | If `gitcvs.allBinary` is set, then file not otherwise |
Matthieu Moy | 23f8239 | 2016-06-28 13:40:10 +0200 | [diff] [blame] | 418 | specified will default to '-kb' mode. Otherwise the `-k` mode |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 419 | is left blank. But if `gitcvs.allBinary` is set to "guess", then |
Matthieu Moy | 23f8239 | 2016-06-28 13:40:10 +0200 | [diff] [blame] | 420 | the correct `-k` mode will be guessed based on the contents of |
Matthew Ogilvie | 90948a4 | 2008-05-14 22:35:48 -0600 | [diff] [blame] | 421 | the file. |
| 422 | |
Jonathan Nieder | 2fd02c9 | 2008-07-03 00:55:07 -0500 | [diff] [blame] | 423 | For best consistency with 'cvs', it is probably best to override the |
Matthew Ogilvie | 90948a4 | 2008-05-14 22:35:48 -0600 | [diff] [blame] | 424 | defaults by setting `gitcvs.usecrlfattr` to true, |
Nguyễn Thái Ngọc Duy | da0005b | 2015-03-11 16:32:45 -0400 | [diff] [blame] | 425 | and `gitcvs.allBinary` to "guess". |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 426 | |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 427 | DEPENDENCIES |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 428 | ------------ |
Jonathan Nieder | ba020ef | 2008-07-03 00:41:41 -0500 | [diff] [blame] | 429 | 'git-cvsserver' depends on DBD::SQLite. |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 430 | |
Martin Langhoff | 3fda8c4 | 2006-02-22 22:50:15 +1300 | [diff] [blame] | 431 | GIT |
| 432 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 433 | Part of the linkgit:git[1] suite |