You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
8.4 KiB
267 lines
8.4 KiB
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. |
|
|
|
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 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 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. |
|
|
|
[[configaccessmethod]] |
|
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 |
|
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 |
|
------ |
|
|
|
[[dbbackend]] |
|
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()`. |
|
|
|
gitcvs.dbname:: |
|
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' |
|
|
|
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 double 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. |
|
|
|
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 |
|
alpha-numeric 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. |
|
|
|
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. |
|
Legacy monitoring operations are not supported (edit, watch and related). |
|
Exports and tagging (tags and branches) are not supported at this stage. |
|
|
|
The server should set the '-k' mode to binary when relevant, however, |
|
this is not really implemented yet. For now, you can force the server |
|
to set '-kb' for all files by setting the `gitcvs.allbinary` config |
|
variable. 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
|
|
|