将项目从RCS迁移到git?

我有一个20年的项目 ,我想从RCS迁移到git,而不会失去历史。 所有的网页都build议One True Path是通过CVS。 但经过一个小时的谷歌search和尝试不同的脚本,我还没有find任何成功转换我的RCS项目树到CVS。 我希望在Stackoverflow的好人会知道什么是实际工作,而不是声称工作,而不是。

(我searchStackoverflow使用本机SOsearch和谷歌search,但如果有一个有用的答案在数据库中,我错过了。)

更新 : http : rcs-fast-export工具于2009年4月14日被修复,这个版本似乎适用于我。 这个工具直接转换成git,没有中间的CVS。 感谢Giuseppe和Jakub!


那些我还记得没用的东西:

  • CVS源contrib目录中的rcs-to-cvs脚本

  • 在2010年4月13日以前的版本中, http : rcs-fast-export工具

  • 在一个名为“Linux的CVS- rcs2cvs -HOW-TO文档”的文档中find了rcs2cvs脚本,

请参阅Git Wiki上的InterfacesFronttendsAndTools页面,位于“工具”,“与其他版本控制系统的交互”,“其他”。 在那里你可以find一个描述和链接到rcs-fast-export ( gitweb )Ruby脚本,由Giuseppe“Oblomov”Bilotta完成。

(网页search也可以findOhloh页面和通知提到的项目)

作为一般规则,您应该小心运行哪些脚本。 对于RCS – > GIT,遵循RCS-> CVS-> GIT方法可能是最符合您的利益的。

从2011-01-12快速浏览了rcs-fast-export.rb,并运行了这部分代码。 这充其量是可怕的。

 # steal username/email data from other init files that may contain the # information def steal_username [ # the user's .hgrc file for a username field ['~/.hgrc', /^\s*username\s*=\s*(["'])?(.*)\1$/, 2], # the user's .(g)vimrc for a changelog_username setting ['~/.vimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], ['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], [] ].each do |fn, rx, idx| ... 

刚发现这个,对我来说工作得很好:

http://cynic.cc/blog/posts/migrate-from-rcs-to-git/

请注意,该页面上的“cvs-source-dir”需要是绝对path。

好了,经过一番修改,我发现将RCS转换为CVS是微不足道的。 这些文件的格式相同,所以只需将文件移动到现有的CVS根目录即可。 这假定您有权访问RCS文件。

 # Create CVS root dir. You only need to do this once. mkdir $HOME/cvs/ cd $HOME/cvs/ cvs init # Import a repository from RCS to CVS cp -a _projectname_/RCS $HOME/cvs/_projectname_ 

我也有这个问题,并与cvs2svn,parsecvs和whatnot搏斗。 parsecvs得到了最接近,但基思似乎已经离开了它,现在随机叉子popup。 我碰到的问题是,它会parsingRCS文件,但它做的最后一件事是git rm文件,所以我将不得不使用git reset来消除删除。

然后我发现mercurial的convert : https : //www.mercurial-scm.org/wiki/ConvertExtension问题解决了!

我试图从单独的RCS树中逐步添加一些东西,它似乎工作。