1git-cvsserver(1) 2================ 3 4NAME 5---- 6git-cvsserver - A CVS server emulator for git 7 8SYNOPSIS 9-------- 10[verse] 11export CVS_SERVER=git-cvsserver 12'cvs' -d :ext:user@server/path/repo.git co <HEAD_name> 13 14DESCRIPTION 15----------- 16 17This application is a CVS emulation layer for git. 18 19It is highly functional. However, not all methods are implemented, 20and for those methods that are implemented, 21not all switches are implemented. 22 23Testing has been done using both the CLI CVS client, and the Eclipse CVS 24plugin. Most functionality works fine with both of these clients. 25 26LIMITATIONS 27----------- 28 29Currently cvsserver works over SSH connections for read/write clients, and 30over pserver for anonymous CVS access. 31 32CVS clients cannot tag, branch or perform GIT merges. 33 34INSTALLATION 35------------ 36 371. If you are going to offer anonymous CVS access via pserver, add a line in 38 /etc/inetd.conf like 39+ 40-- 41------ 42 cvspserver stream tcp nowait nobody git-cvsserver pserver 43 44------ 45Note: In some cases, you need to pass the 'pserver' argument twice for 46git-cvsserver to see it. So the line would look like 47 48------ 49 cvspserver stream tcp nowait nobody git-cvsserver pserver pserver 50 51------ 52No special setup is needed for SSH access, other than having GIT tools 53in the PATH. If you have clients that do not accept the CVS_SERVER 54env variable, you can rename git-cvsserver to cvs. 55-- 562. For each repo that you want accessible from CVS you need to edit config in 57 the repo and add the following section. 58+ 59-- 60------ 61 [gitcvs] 62 enabled=1 63 # optional for debugging 64 logfile=/path/to/logfile 65 66------ 67Note: you need to ensure each user that is going to invoke git-cvsserver has 68write access to the log file and to the database (see 69<<dbbackend,Database Backend>>. If you want to offer write access over 70SSH, the users of course also need write access to the git repository itself. 71 72[[configaccessmethod]] 73All configuration variables can also be overriden for a specific method of 74access. Valid method names are "ext" (for SSH access) and "pserver". The 75following example configuration would disable pserver access while still 76allowing access over SSH. 77------ 78 [gitcvs] 79 enabled=0 80 81 [gitcvs "ext"] 82 enabled=1 83------ 84-- 853. On the client machine you need to set the following variables. 86 CVSROOT should be set as per normal, but the directory should point at the 87 appropriate git repo. For example: 88+ 89-- 90For SSH access, CVS_SERVER should be set to git-cvsserver 91 92Example: 93 94------ 95 export CVSROOT=:ext:user@server:/var/git/project.git 96 export CVS_SERVER=git-cvsserver 97------ 98-- 994. For SSH clients that will make commits, make sure their .bashrc file 100 sets the GIT_AUTHOR and GIT_COMMITTER variables. 101 1025. Clients should now be able to check out the project. Use the CVS 'module' 103 name to indicate what GIT 'head' you want to check out. Example: 104+ 105------ 106 cvs co -d project-master master 107------ 108 109[[dbbackend]] 110Database Backend 111---------------- 112 113git-cvsserver uses one database per git head (i.e. CVS module) to 114store information about the repository for faster access. The 115database doesn't contain any persitent data and can be completly 116regenerated from the git repository at any time. The database 117needs to be updated (i.e. written to) after every commit. That 118means that even if you offer only read access (e.g. by using 119the pserver method), git-cvsserver should have write access to 120the database to work reliably (otherwise you need to make sure 121that the database if up-to-date all the time git-cvsserver is run). 122 123By default it uses SQLite databases in the git directory, named 124`gitcvs.<module_name>.sqlite`. Note that the SQLite backend creates 125temporary files in the same directory as the database file on 126write so it might not be enough to grant the users using 127git-cvsserver write access to the database file without granting 128them also write access to the directory. 129 130You can configure the database backend with the following 131configuration variables: 132 133Configuring database backend 134~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 136git-cvsserver uses the Perl DBI module. Please also read 137its documentation if changing these variables, especially 138about `DBI->connect()`. 139 140gitcvs.dbname:: 141 Database name. The exact meaning depends on the 142 used database driver, for SQLite this is a filename. 143 Supports variable substitution (see below). May 144 not contain semicolons (`;`). 145 Default: '%Ggitcvs.%m.sqlite' 146 147gitcvs.dbdriver:: 148 Used DBI driver. You can specify any available driver 149 for this here, but it might not work. cvsserver is tested 150 with 'DBD::SQLite', reported to work with 151 'DBD::Pg', and reported *not* to work with 'DBD::mysql'. 152 Please regard this as an experimental feature. May not 153 contain double colons (`:`). 154 Default: 'SQLite' 155 156gitcvs.dbuser:: 157 Database user. Only useful if setting `dbdriver`, since 158 SQLite has no concept of database users. Supports variable 159 substitution (see below). 160 161gitcvs.dbpass:: 162 Database password. Only useful if setting `dbdriver`, since 163 SQLite has no concept of database passwords. 164 165All variables can also be set per access method, see <<configaccessmethod,above>>. 166 167Variable substitution 168^^^^^^^^^^^^^^^^^^^^^ 169In `dbdriver` and `dbuser` you can use the following variables: 170 171%G:: 172 git directory name 173%g:: 174 git directory name, where all characters except for 175 alpha-numeric ones, `.`, and `-` are replaced with 176 `_` (this should make it easier to use the directory 177 name in a filename if wanted) 178%m:: 179 CVS module/git head name 180%a:: 181 access method (one of "ext" or "pserver") 182%u:: 183 Name of the user running git-cvsserver. 184 If no name can be determined, the 185 numeric uid is used. 186 187Eclipse CVS Client Notes 188------------------------ 189 190To get a checkout with the Eclipse CVS client: 191 1921. Select "Create a new project -> From CVS checkout" 1932. Create a new location. See the notes below for details on how to choose the 194 right protocol. 1953. Browse the 'modules' available. It will give you a list of the heads in 196 the repository. You will not be able to browse the tree from there. Only 197 the heads. 1984. Pick 'HEAD' when it asks what branch/tag to check out. Untick the 199 "launch commit wizard" to avoid committing the .project file. 200 201Protocol notes: If you are using anonymous access via pserver, just select that. 202Those using SSH access should choose the 'ext' protocol, and configure 'ext' 203access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to 204'git-cvsserver'. Not that password support is not good when using 'ext', 205you will definitely want to have SSH keys setup. 206 207Alternatively, you can just use the non-standard extssh protocol that Eclipse 208offer. In that case CVS_SERVER is ignored, and you will have to replace 209the cvs utility on the server with git-cvsserver or manipulate your .bashrc 210so that calling 'cvs' effectively calls git-cvsserver. 211 212Clients known to work 213--------------------- 214 215- CVS 1.12.9 on Debian 216- CVS 1.11.17 on MacOSX (from Fink package) 217- Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes) 218- TortoiseCVS 219 220Operations supported 221-------------------- 222 223All the operations required for normal use are supported, including 224checkout, diff, status, update, log, add, remove, commit. 225Legacy monitoring operations are not supported (edit, watch and related). 226Exports and tagging (tags and branches) are not supported at this stage. 227 228The server will set the -k mode to binary when relevant. In proper GIT 229tradition, the contents of the files are always respected. 230No keyword expansion or newline munging is supported. 231 232Dependencies 233------------ 234 235git-cvsserver depends on DBD::SQLite. 236 237Copyright and Authors 238--------------------- 239 240This program is copyright The Open University UK - 2006. 241 242Authors: 243 244- Martyn Smith <martyn@catalyst.net.nz> 245- Martin Langhoff <martin@catalyst.net.nz> 246 247with ideas and patches from participants of the git-list <git@vger.kernel.org>. 248 249Documentation 250-------------- 251Documentation by Martyn Smith <martyn@catalyst.net.nz>, Martin Langhoff <martin@catalyst.net.nz>, and Matthias Urlichs <smurf@smurf.noris.de>. 252 253GIT 254--- 255Part of the gitlink:git[7] suite