|
|
|
git-cvsserver(1)
|
|
|
|
================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
|
|
|
git-cvsserver - A CVS server emulator for git
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
|
|
|
[verse]
|
|
|
|
export CVS_SERVER=git-cvsserver
|
|
|
|
'cvs' -d :ext:user@server/path/repo.git co <HEAD_name>
|
|
|
|
|
|
|
|
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
|
|
|
|
-----------
|
|
|
|
|
|
|
|
Currently cvsserver works over SSH connections for read/write clients, and
|
|
|
|
over pserver for anonymous CVS access.
|
|
|
|
|
|
|
|
CVS clients cannot tag, branch or perform GIT merges.
|
|
|
|
|
|
|
|
INSTALLATION
|
|
|
|
------------
|
|
|
|
|
|
|
|
1. If you are going to offer anonymous CVS access via pserver, add a line in
|
|
|
|
/etc/inetd.conf like
|
|
|
|
+
|
|
|
|
--
|
|
|
|
------
|
|
|
|
cvspserver stream tcp nowait nobody git-cvsserver pserver
|
|
|
|
|
|
|
|
------
|
|
|
|
Note: In some cases, you need to pass the 'pserver' argument twice for
|
|
|
|
git-cvsserver to see it. So the line would look like
|
|
|
|
|
|
|
|
------
|
|
|
|
cvspserver stream tcp nowait nobody git-cvsserver pserver pserver
|
|
|
|
|
|
|
|
------
|
|
|
|
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
|
|
|
|
env variable, you can rename git-cvsserver to cvs.
|
|
|
|
--
|
|
|
|
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 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.
|
|
|
|
--
|
|
|
|
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
|
|
|
|
appropriate git repo. For example:
|
|
|
|
+
|
|
|
|
--
|
|
|
|
For SSH access, CVS_SERVER should be set to git-cvsserver
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
------
|
|
|
|
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 .bashrc file
|
|
|
|
sets the GIT_AUTHOR and GIT_COMMITTER variables.
|
|
|
|
|
|
|
|
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. Example:
|
|
|
|
+
|
|
|
|
------
|
|
|
|
cvs co -d project-master master
|
|
|
|
------
|
|
|
|
|
|
|
|
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'. Not 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.
|
|
|
|
Legacy monitoring operations are not supported (edit, watch and related).
|
|
|
|
Exports and tagging (tags and branches) are not supported at this stage.
|
|
|
|
|
|
|
|
The server will set the -k mode to binary when relevant. In proper GIT
|
|
|
|
tradition, the contents of the files are always respected.
|
|
|
|
No keyword expansion or newline munging is supported.
|
|
|
|
|
|
|
|
Dependencies
|
|
|
|
------------
|
|
|
|
|
|
|
|
git-cvsserver depends on DBD::SQLite.
|
|
|
|
|
|
|
|
Copyright and Authors
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
This program is copyright The Open University UK - 2006.
|
|
|
|
|
|
|
|
Authors:
|
|
|
|
|
|
|
|
- Martyn Smith <martyn@catalyst.net.nz>
|
|
|
|
- Martin Langhoff <martin@catalyst.net.nz>
|
|
|
|
|
|
|
|
with ideas and patches from participants of the git-list <git@vger.kernel.org>.
|
|
|
|
|
|
|
|
Documentation
|
|
|
|
--------------
|
|
|
|
Documentation by Martyn Smith <martyn@catalyst.net.nz>, Martin Langhoff <martin@catalyst.net.nz>, and Matthias Urlichs <smurf@smurf.noris.de>.
|
|
|
|
|
|
|
|
GIT
|
|
|
|
---
|
|
|
|
Part of the gitlink:git[7] suite
|