Merge branch 'jc/push-follow-tag'
[gitweb.git] / Documentation / git-cvsserver.txt
index 88d814af0e050eb3b31f5763cbf12f03a5f6cbc3..472f5cbd0712bc3202f44743e80397bfa6fb16ba 100644 (file)
@@ -3,7 +3,7 @@ git-cvsserver(1)
 
 NAME
 ----
-git-cvsserver - A CVS server emulator for git
+git-cvsserver - A CVS server emulator for Git
 
 SYNOPSIS
 --------
@@ -60,7 +60,7 @@ unless '--export-all' was given, too.
 DESCRIPTION
 -----------
 
-This application is a CVS emulation layer for git.
+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,
@@ -72,9 +72,9 @@ plugin. Most functionality works fine with both of these clients.
 LIMITATIONS
 -----------
 
-CVS clients cannot tag, branch or perform GIT merges.
+CVS clients cannot tag, branch or perform Git merges.
 
-'git-cvsserver' maps GIT branches to CVS modules. This is very different
+'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.
 
@@ -130,7 +130,7 @@ 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
+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`.
 
@@ -160,9 +160,9 @@ with CVS_SERVER (and shouldn't) as 'git-shell' understands `cvs` to mean
 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.
+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
+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]]
@@ -181,7 +181,7 @@ allowing access over SSH.
 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
+   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'.
 +
 --
@@ -197,7 +197,7 @@ allowing access over SSH.
    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 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:
@@ -210,7 +210,7 @@ allowing access over SSH.
 Database Backend
 ----------------
 
-'git-cvsserver' uses one database per git head (i.e. CVS module) to
+'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.
@@ -225,7 +225,7 @@ 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
+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
@@ -291,14 +291,14 @@ Variable substitution
 In `dbdriver` and `dbuser` you can use the following variables:
 
 %G::
-       git directory name
+       Git directory name
 %g::
-       git directory name, where all characters except for
+       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
+       CVS module/Git head name
 %a::
        access method (one of "ext" or "pserver")
 %u::
@@ -359,6 +359,43 @@ 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.