CVSCVT(1) FreeBSD General Commands Manual CVSCVT(1)


cvscvt — CVS/RCS to git and svn converter


cvscvt [−e email−domain] [−f git svn] [−K] [−k keyword] [−s split−threshold[s|m|h|d]] [−T trunk−name] [−t tags−name] [−v] path ...


cvscvt reads in a set of directory trees containing RCS files (suffix ,v) and converts them to a git fast−import or svn dump. File revisions are grouped to change sets by author and commit log.

Any number of paths may be given, which will be placed at the root of the resulting tree. If a path ends in a slash, its contents will be placed at the root, otherwise this directory will be placed at the root. It is also allowed to specify single ,v files.


Set the email−domain of the authors and committers. This option is only valid for git output. The default is invalid.

−f git | svn

Select the dump output format. The default is git.


Do not unexpand the default RCS keywords Author, Date, Header, Id, Locker, Log, Name, RCSfile, Revision, Source and State.

−k keyword

Unexpand the given keyword. No unexpansion is performed on files with the substition modes b and o.

−s split−threshold[s|m|h|d]

If a potential change set contains a gap longer than this threshold between two consecutive time stamps, then the change set is split at this point. An optional suffix for seconds, minutes, hours or days may be appended. If no suffix is given, the threshold is interpreted as seconds. The default is 300 seconds.

−T trunk−name

Set the name for the trunk in the resulting dump. The default is master for git and trunk for svn.

−t tags−name

Set the base name for the tags in the resulting dump. This is only valid for svn output. The default is tags.


Show more verbose progress information on stderr.


git init repo.git
cvscvt repo.cvs/ | (cd repo.git && git fast−import)

Import a CVS repository rooted at repo.cvs/ into a new git repository rooted at repo.git. The trailing slash is important, so the files in repo.cvs/ are placed at the root of the resulting repository. Otherwise the resulting repository would have one directory repo.cvs at its root.

svnadmin create repo.svn
cvscvt -f svn repo.cvs/ | svnadmin load repo.svn

This is the same as above except for the target being a svn repository.


cvs(1), git−fast−import(1), rcs(1), svnadmin(1)


cvscvt was written by Christoph Mallon ⟨⟩.


No branches or tags on branches are converted, only trunk and its tags. In particular vendor branches are not merged into trunk. This is work in progress.

January 14, 2012