path: root/Documentation/git-cvsserver.txt
diff options
authorJunio C Hamano <>2007-04-18 05:17:46 (GMT)
committerJunio C Hamano <>2007-04-18 05:17:46 (GMT)
commitabbf594763a14e9c00c61f688e45bed636f1eb52 (patch)
treea86d03460ea615d59109c269c9e8fe1fae1c89ca /Documentation/git-cvsserver.txt
parent17bee1947ac407c0a27f3ef7da573eacb848520e (diff)
parent047528680e783046b89bb6b220a7576d74c538d0 (diff)
Merge branch 'fl/cvsserver'
* fl/cvsserver: config.txt: Add gitcvs.db* variables cvsserver: Document the GIT branches -> CVS modules mapping more prominently cvsserver: Reword documentation on necessity of write access cvsserver: Allow to "add" a removed file cvsserver: Add asciidoc documentation for new database backend configuration cvsserver: Corrections to the database backend configuration cvsserver: Use DBI->table_info instead of DBI->tables cvsserver: Abort if connect to database fails cvsserver: Make the database backend configurable cvsserver: Allow to override the configuration per access method cvsserver: Handle three part keys in git config correctly cvsserver: Introduce new state variable 'method' Conflicts: Documentation/config.txt
Diffstat (limited to 'Documentation/git-cvsserver.txt')
1 files changed, 104 insertions, 3 deletions
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt
index f9e0c77..d22844b 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.txt
@@ -31,6 +31,10 @@ over pserver for anonymous CVS access.
CVS clients cannot tag, branch or perform GIT merges.
+git-cvsserver maps GIT branches to CVS modules. This is very different
+from what most CVS users would expect since in CVS modules usually represent
+one or more directories.
@@ -65,9 +69,22 @@ env variable, you can rename git-cvsserver to cvs.
Note: you need to ensure each user that is going to invoke git-cvsserver has
-write access to the log file and to the git repository. When offering anon
-access via pserver, this means that the nobody user should have write access
-to at least the sqlite database at the root of the repository.
+write access to the log file and to the database (see
+<<dbbackend,Database Backend>>. If you want to offer write access over
+SSH, the users of course also need write access to the git repository itself.
+All configuration variables can also be overriden for a specific method of
+access. Valid method names are "ext" (for SSH access) and "pserver". The
+following example configuration would disable pserver access while still
+allowing access over SSH.
+ [gitcvs]
+ enabled=0
+ [gitcvs "ext"]
+ enabled=1
3. On the client machine you need to set the following variables.
CVSROOT should be set as per normal, but the directory should point at the
@@ -93,6 +110,90 @@ Example:
cvs co -d project-master master
+Database Backend
+git-cvsserver uses one database per git head (i.e. CVS module) to
+store information about the repository for faster access. The
+database doesn't contain any persitent data and can be completly
+regenerated from the git repository at any time. The database
+needs to be updated (i.e. written to) after every commit.
+If the commit is done directly by using git (as opposed to
+using git-cvsserver) the update will need to happen on the
+next repository access by git-cvsserver, independent of
+access method and requested operation.
+That means that even if you offer only read access (e.g. by using
+the pserver method), git-cvsserver should have write access to
+the database to work reliably (otherwise you need to make sure
+that the database if up-to-date all the time git-cvsserver is run).
+By default it uses SQLite databases in the git directory, named
+`gitcvs.<module_name>.sqlite`. Note that the SQLite backend creates
+temporary files in the same directory as the database file on
+write so it might not be enough to grant the users using
+git-cvsserver write access to the database file without granting
+them write access to the directory, too.
+You can configure the database backend with the following
+configuration variables:
+Configuring database backend
+git-cvsserver uses the Perl DBI module. Please also read
+its documentation if changing these variables, especially
+about `DBI->connect()`.
+ Database name. The exact meaning depends on the
+ used database driver, for SQLite this is a filename.
+ Supports variable substitution (see below). May
+ not contain semicolons (`;`).
+ Default: '%Ggitcvs.%m.sqlite'
+ Used DBI driver. You can specify any available driver
+ for this here, but it might not work. cvsserver is tested
+ with 'DBD::SQLite', reported to work with
+ 'DBD::Pg', and reported *not* to work with 'DBD::mysql'.
+ Please regard this as an experimental feature. May not
+ contain double colons (`:`).
+ Default: 'SQLite'
+ Database user. Only useful if setting `dbdriver`, since
+ SQLite has no concept of database users. Supports variable
+ substitution (see below).
+ Database password. Only useful if setting `dbdriver`, since
+ SQLite has no concept of database passwords.
+All variables can also be set per access method, see <<configaccessmethod,above>>.
+Variable substitution
+In `dbdriver` and `dbuser` you can use the following variables:
+ git directory name
+ git directory name, where all characters except for
+ alpha-numeric ones, `.`, and `-` are replaced with
+ `_` (this should make it easier to use the directory
+ name in a filename if wanted)
+ CVS module/git head name
+ access method (one of "ext" or "pserver")
+ Name of the user running git-cvsserver.
+ If no name can be determined, the
+ numeric uid is used.
Eclipse CVS Client Notes