I have about 10-12 different projects are in CVS repository which I need to migrate to Git/Bitbucket. I can not find much help with any migration tool. I did find cvstogit tool but haven't been able to use it.

Can I use cvstogit using my Windows PC as staging? or Do I need to have some Linux server for staging.

Any help is much appreciated.

Thank you.


I would suggest looking at the Python 2 based csv2svn tool which can convert cvs repositories to any of Subversion, git, Bazaar, or Mercurial.

cvs2svn infers what happened in the history of your CVS repository and replicates that history as accurately as possible in the target SCM. All revisions, branches, tags, log messages, author names, and commit dates are converted. cvs2svn deduces what CVS modifications were made at the same time, and outputs these modifications grouped together as changesets in the target SCM. cvs2svn also deals with many CVS quirks and is highly configurable. See the comprehensive feature list.

Please read the documentation carefully before using cvs2svn.

  • Free, gratis & open source
  • Cross platform - should work on Windows, OS-X or Linux.
  • Copes well with the vagaries of CVS usage
  • Once you have the converted git repository on your machine you should be able to push it to a suitable host such as github.

N.B. This tool is Python 2 only and python 2 will sunset at the end of 2019! At the download python link above you will need to select the python 2 release that matches your platform.

N.B. I personally have had some problems connecting to the Tigris site but there is a mirror of the source on GitHub. You can download from there and run python setup.py install to install.

Note: The documentation on the csv2git utility, etc., lives in the www folder of the downloaded code.

  • Thanks Steve. I have migrated mu CVS repos to Git using cvs2git [cvs2svn]. However my branches from CVS are showing up as "Tag" in Git. Is that how Git works? Thanks again for your answer. – Abhi Jul 26 '19 at 18:47
  • @Abhi cvs2svn & cvs2git use heuristics, (i.e. educated guesswork), to try to distinguish between cvs tags & branches based on the naming but can get this wrong depending on the naming convention that was used if any and whether there were any commits to a branch after it was created (if there were not then it will assume it should be a tag). See mcs.anl.gov/~jacob/cvs2svn/cvs2svn.html section Tag/branch inconsistencies for how to address this sort of issue. – Steve Barnes Jul 27 '19 at 5:34
  • @Abhi: From there "You can have cvs2svn write a text file showing how each symbol was converted by using the --write-symbol-info option. If you disagree with any of cvs2svn's choices, you can make a copy of this file, edit it, then pass it to cvs2svn by using the --symbol-hints option." (This is from the cvs2svn docs but should work for cvs2svn) – Steve Barnes Jul 27 '19 at 5:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.