This is an old revision of the document!
Description
It should be possible to import the current FreeBSD CVS repository, and retain the following.
- A complete history of HEAD
- Every RELENG branch, mapped to the appropriate branching methodology of the target VCS
- If the target VCS supports atomic commits then commits to the CVS repo that would have been considered atomic by log_accum.pl should also be atomic in the new repository
It is not necessary to maintain the same per-file revision numbers. However, it is desirable that a mechanism be available to map from commits in the new repo to commits in CVS.
For example, it should be possible to say that src/README, r1.23, can be found at revision N (or changeset FOO) in the new repo.
Current Implementation
N/A
SVN Implementation
Hg Implementation
Git Implementation
Git's conversion-from-CVS tools are still a work in progress. There are a few options:
git-cvsimport
This should be ignored. It uses cvsps, which totally mangles your history
parsecvs
This tool does a good job of mapping CVS history into atomic commits. However, the current algorithm is O(revisions * files) in memory, which is too much on repos of our size (died on an i386 with 3GB of RAM). We think we can get it down to O(revisions + files) or so, which should be doable.
cvs2svn; git-fast-import (or cvs2svn ; svn2git)
The problem here is that there have been many reports of cvs2svn getting the history wrong. One of the features of parsecvs is that I understand its methods, and its methods sound pretty solid. Also, the cvs2svn conversions are quite time-consuming (several days on mozilla, from what I understand, which is about twice our size), so doing repeated imports to get a sample repository output that you like is rough.