git-cvsserver(1)
================

NAME
----
git-cvsserver - A CVS server emulator for Git

SYNOPSIS
--------

SSH:

[verse]
export CVS_SERVER="git cvsserver"
'cvs' -d :ext:user@server/path/repo.git co <HEAD_name>

pserver (/etc/inetd.conf):

[verse]
cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver

Usage:

[verse]
'git-cvsserver' [<options>] [pserver|server] [<directory> ...]

OPTIONS
-------

All these options obviously only make sense if enforced by the server side.
They have been implemented to resemble the linkgit:git-daemon[1] options as
closely as possible.

--base-path <path>::
Prepend 'path' to requested CVSROOT

--strict-paths::
Don't allow recursing into subdirectories

--export-all::
Don't check for `gitcvs.enabled` in config. You also have to specify a list
of allowed directories (see below) if you want to use this option.

-V::
--version::
Print version information and exit

-h::
-H::
--help::
Print usage information and exit

<directory>::
You can specify a list of allowed directories. If no directories
are given, all are allowed. This is an additional restriction, gitcvs
access still needs to be enabled by the `gitcvs.enabled` config option
unless `--export-all` was given, too.


DESCRIPTION
-----------

This application is a CVS emulation layer for Git.

It is highly functional. However, not all methods are implemented,
and for those methods that are implemented,
not all switches are implemented.

Testing has been done using both the CLI CVS client, and the Eclipse CVS
plugin. Most functionality works fine with both of these clients.

LIMITATIONS
-----------

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.

INSTALLATION
------------

1. If you are going to offer CVS access via pserver, add a line in
   /etc/inetd.conf like
+
--
------
   cvspserver stream tcp nowait nobody git-cvsserver pserver

------
Note: Some inetd servers let you specify the name of the executable
independently of the value of argv[0] (i.e. the name the program assumes
it was executed with). In this case the correct line in /etc/inetd.conf
looks like

------
   cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver

------

Only anonymous access is provided by pserve by default. To commit you
will have to create pserver accounts, simply add a gitcvs.authdb
setting in the config file of the repositories you want the cvsserver
to allow writes to, for example:

------

   [gitcvs]
	authdb = /etc/cvsserver/passwd

------
The format of these files is username followed by the encrypted password,
for example:

------
   myuser:$1Oyx5r9mdGZ2
   myuser:$1$BA)@$vbnMJMDym7tA32AamXrm./
------
You can use the 'htpasswd' facility that comes with Apache to make these
files, but Apache's MD5 crypt method differs from the one used by most C
library's crypt() function, so don't use the -m option.

Alternatively you can produce the password with perl's crypt() operator:
-----
   perl -e 'my ($user, $pass) = @ARGV; printf "%s:%s\n", $user, crypt($user, $pass)' $USER password
-----

Then provide your password via the pserver method, for example:
------
   cvs -d:pserver:someuser:somepassword <at> server/path/repo.git co <HEAD_name>
------
No special setup is needed for SSH access, other than having Git tools
in the PATH. If you have clients that do not accept the CVS_SERVER
environment variable, you can rename 'git-cvsserver' to `cvs`.

Note: Newer CVS versions (>= 1.12.11) also support specifying
CVS_SERVER directly in CVSROOT like

------
cvs -d ":ext;CVS_SERVER=git cvsserver:user@server/path/repo.git" co <HEAD_name>
------
This has the advantage that it will be saved in your 'CVS/Root' files and
you don't need to worry about always setting the correct environment
variable.  SSH users restricted to 'git-shell' don't need to override the default
with CVS_SERVER (and shouldn't) as 'git-shell' understands `cvs` to mean
'git-cvsserver' and pretends that the other end runs the real 'cvs' better.
--
2. For each repo that you want accessible from CVS you need to edit config in
   the repo and add the following section.
+
--
------
   [gitcvs]
        enabled=1
        # optional for debugging
	logFile=/path/to/logfile

------
Note: you need to ensure each user that is going to invoke 'git-cvsserver' has
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.

You also need to ensure that each repository is "bare" (without a Git index
file) for `cvs commit` to work. See linkgit:gitcvs-migration[7].

[[configaccessmethod]]
All configuration variables can also be overridden 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. If you didn't specify the CVSROOT/CVS_SERVER directly in the checkout command,
   automatically saving it in your 'CVS/Root' files, then you need to set them
   explicitly in your environment.  CVSROOT should be set as per normal, but the
   directory should point at the appropriate Git repo.  As above, for SSH clients
   _not_ restricted to 'git-shell', CVS_SERVER should be set to 'git-cvsserver'.
+
--
------
     export CVSROOT=:ext:user@server:/var/git/project.git
     export CVS_SERVER="git cvsserver"
------
--
4. For SSH clients that will make commits, make sure their server-side
   .ssh/environment files (or .bashrc, etc., according to their specific shell)
   export appropriate values for GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL,
   GIT_COMMITTER_NAME, and GIT_COMMITTER_EMAIL.  For SSH clients whose login
   shell is bash, .bashrc may be a reasonable alternative.

5. Clients should now be able to check out the project. Use the CVS 'module'
   name to indicate what Git 'head' you want to check out.  This also sets the
   name of your newly checked-out directory, unless you tell it otherwise with
   `-d <dir_name>`.  For example, this checks out 'master' branch to the
   `project-master` directory:
+
------
     cvs co -d project-master master
------

[[dbbackend]]
DATABASE BACKEND
----------------

'git-cvsserver' uses one database per Git head (i.e. CVS module) to
store information about the repository to maintain consistent
CVS revision numbers. 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 is up to date any time 'git-cvsserver' is executed).

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.

The database cannot be reliably regenerated in a
consistent form after the branch it is tracking has changed.
Example: For merged branches, 'git-cvsserver' only tracks
one branch of development, and after a 'git merge' an
incrementally updated database may track a different branch
than a database regenerated from scratch, causing inconsistent
CVS revision numbers. `git-cvsserver` has no way of knowing which
branch it would have picked if it had been run incrementally
pre-merge. So if you have to fully or partially (from old
backup) regenerate the database, you should be suspicious
of pre-existing CVS sandboxes.

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()`.

gitcvs.dbName::
	Database name. The exact meaning depends on the
	selected database driver, for SQLite this is a filename.
	Supports variable substitution (see below). May
	not contain semicolons (`;`).
	Default: '%Ggitcvs.%m.sqlite'

gitcvs.dbDriver::
	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 colons (`:`).
	Default: 'SQLite'

gitcvs.dbuser::
	Database user. Only useful if setting `dbDriver`, since
	SQLite has no concept of database users. Supports variable
	substitution (see below).

gitcvs.dbPass::
	Database password.  Only useful if setting `dbDriver`, since
	SQLite has no concept of database passwords.

gitcvs.dbTableNamePrefix::
	Database table name prefix.  Supports variable substitution
	(see below).  Any non-alphabetic characters will be replaced
	with underscores.

All variables can also be set per access method, see <<configaccessmethod,above>>.

Variable substitution
^^^^^^^^^^^^^^^^^^^^^
In `dbDriver` and `dbUser` you can use the following variables:

%G::
	Git directory name
%g::
	Git directory name, where all characters except for
	alphanumeric ones, `.`, and `-` are replaced with
	`_` (this should make it easier to use the directory
	name in a filename if wanted)
%m::
	CVS module/Git head name
%a::
	access method (one of "ext" or "pserver")
%u::
	Name of the user running 'git-cvsserver'.
	If no name can be determined, the
	numeric uid is used.

ENVIRONMENT
-----------

These variables obviate the need for command-line options in some
circumstances, allowing easier restricted usage through git-shell.

GIT_CVSSERVER_BASE_PATH takes the place of the argument to --base-path.

GIT_CVSSERVER_ROOT specifies a single-directory whitelist. The
repository must still be configured to allow access through
git-cvsserver, as described above.

When these environment variables are set, the corresponding
command-line arguments may not be used.

ECLIPSE CVS CLIENT NOTES
------------------------

To get a checkout with the Eclipse CVS client:

1. Select "Create a new project -> From CVS checkout"
2. Create a new location. See the notes below for details on how to choose the
   right protocol.
3. Browse the 'modules' available. It will give you a list of the heads in
   the repository. You will not be able to browse the tree from there. Only
   the heads.
4. Pick `HEAD` when it asks what branch/tag to check out. Untick the
   "launch commit wizard" to avoid committing the .project file.

Protocol notes: If you are using anonymous access via pserver, just select that.
Those using SSH access should choose the 'ext' protocol, and configure 'ext'
access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to
"`git cvsserver`". Note that password support is not good when using 'ext',
you will definitely want to have SSH keys setup.

Alternatively, you can just use the non-standard extssh protocol that Eclipse
offer. In that case CVS_SERVER is ignored, and you will have to replace
the cvs utility on the server with 'git-cvsserver' or manipulate your `.bashrc`
so that calling 'cvs' effectively calls 'git-cvsserver'.

CLIENTS KNOWN TO WORK
---------------------

- CVS 1.12.9 on Debian
- CVS 1.11.17 on MacOSX (from Fink package)
- Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes)
- TortoiseCVS

OPERATIONS SUPPORTED
--------------------

All the operations required for normal use are supported, including
checkout, diff, status, update, log, add, remove, commit.

Most CVS command arguments that read CVS tags or revision numbers
(typically -r) work, and also support any git refspec
(tag, branch, commit ID, etc).
However, CVS revision numbers for non-default branches are not well
emulated, and cvs log does not show tags or branches at
all.  (Non-main-branch CVS revision numbers superficially resemble CVS
revision numbers, but they actually encode a git commit ID directly,
rather than represent the number of revisions since the branch point.)

Note that there are two ways to checkout a particular branch.
As described elsewhere on this page, the "module" parameter
of cvs checkout is interpreted as a branch name, and it becomes
the main branch.  It remains the main branch for a given sandbox
even if you temporarily make another branch sticky with
cvs update -r.  Alternatively, the -r argument can indicate
some other branch to actually checkout, even though the module
is still the "main" branch.  Tradeoffs (as currently
implemented): Each new "module" creates a new database on disk with
a history for the given module, and after the database is created,
operations against that main branch are fast.  Or alternatively,
-r doesn't take any extra disk space, but may be significantly slower for
many operations, like cvs update.

If you want to refer to a git refspec that has characters that are
not allowed by CVS, you have two options.  First, it may just work
to supply the git refspec directly to the appropriate CVS -r argument;
some CVS clients don't seem to do much sanity checking of the argument.
Second, if that fails, you can use a special character escape mechanism
that only uses characters that are valid in CVS tags.  A sequence
of 4 or 5 characters of the form (underscore (`"_"`), dash (`"-"`),
one or two characters, and dash (`"-"`)) can encode various characters based
on the one or two letters: `"s"` for slash (`"/"`), `"p"` for
period (`"."`), `"u"` for underscore (`"_"`), or two hexadecimal digits
for any byte value at all (typically an ASCII number, or perhaps a part
of a UTF-8 encoded character).

Legacy monitoring operations are not supported (edit, watch and related).
Exports and tagging (tags and branches) are not supported at this stage.

CRLF Line Ending Conversions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

By default the server leaves the `-k` mode blank for all files,
which causes the CVS client to treat them as a text files, subject
to end-of-line conversion on some platforms.

You can make the server use the end-of-line conversion attributes to
set the `-k` modes for files by setting the `gitcvs.usecrlfattr`
config variable.  See linkgit:gitattributes[5] for more information
about end-of-line conversion.

Alternatively, if `gitcvs.usecrlfattr` config is not enabled
or the attributes do not allow automatic detection for a filename, then
the server uses the `gitcvs.allBinary` config for the default setting.
If `gitcvs.allBinary` is set, then file not otherwise
specified will default to '-kb' mode. Otherwise the `-k` mode
is left blank. But if `gitcvs.allBinary` is set to "guess", then
the correct `-k` mode will be guessed based on the contents of
the file.

For best consistency with 'cvs', it is probably best to override the
defaults by setting `gitcvs.usecrlfattr` to true,
and `gitcvs.allBinary` to "guess".

DEPENDENCIES
------------
'git-cvsserver' depends on DBD::SQLite.

GIT
---
Part of the linkgit:git[1] suite
