Pretend to be CVS so old clients can pull.
Serve a Git repo as a fake CVS server so legacy clients can pull from it. Niche bridge for shops still wedded to CVS tooling.
A pserver-shaped facade over Git that speaks just enough CVS to satisfy old clients. Read-mostly: write support exists but is fragile and best avoided.
git cvsserver [<options>] [pserver|server] [<directory> ...]
Typically launched from xinetd/inetd as the pserver command. Authenticates
against ~/.cvspasswd, then maps a Git repo into a CVS-shaped namespace.
Requires SQLite (default) or another DBI backend to cache state.| Flag | What it does |
|---|---|
--base-path <path> | Strip prefix from CVS module paths so clients see clean module names. |
--strict-paths | Refuse to serve directories outside the path list passed on the command line. |
--export-all | Serve every Git repo found, not just those with the magic export marker. |
-V, --version | Print version and exit. |
--export-marks <file> | Write the internal commit-to-CVS-rev mapping out for inspection. |
--no-strict-paths | ⚠️ Allow clients to escape the served directory list. Almost never what you want on a public box. |
git cvsserver pserver /srv/gitgit cvsserver server /srv/gitgit config --bool gitcvs.enabled truegit config gitcvs.dbDriver SQLite && git config gitcvs.dbName %Ggitcvs.%m.sqliteserver = /usr/bin/git-cvsserver pserver --base-path=/srv/git --export-allcvs -d :pserver:alice@127.0.0.1:/myrepo co masterHit each option, then Check answers. Score is recorded; Next is always open.