Migrate project from RCS to git?

南楼画角 提交于 2020-01-10 06:44:08

问题


I have a 20-year-old project that I would like to migrate from RCS to git, without losing the history. All web pages suggest that the One True Path is through CVS. But after an hour of Googling and trying different scripts, I have yet to find anything that successfully converts my RCS project tree to CVS. I'm hoping the good people at Stackoverflow will know what actually works, as opposed to what is claimed to work and doesn't.

(I searched Stackoverflow using both the native SO search and a Google search, but if there's a helpful answer in the database, I missed it.)

UPDATE: The rcs-fast-export tool at http://git.oblomov.eu/rcs-fast-export was repaired on 14 April 2009, and this version seems to work for me. This tool converts straight to git with no intermediate CVS. Thanks Giuseppe and Jakub!!!


Things that did not work that I still remember:

  • The rcs-to-cvs script that ships in the contrib directory of the CVS sources

  • The rcs-fast-export tool at http://git.oblomov.eu/rcs-fast-export in versions before 13 April 2010

  • The rcs2cvs script found in a document called "CVS-RCS- HOW-TO Document for Linux"


回答1:


See InterfacesFrontendsAndTools page on Git Wiki, in "Tools", "Interaction with other Revision Control Systems", "Other". There you would find a description and a link to rcs-fast-export (gitweb) Ruby script by Giuseppe "Oblomov" Bilotta.

(Web search would find also Ohloh page and announcement for mentioned project).




回答2:


OK, after a little tinkering, I found it was trivial to convert RCS to CVS. The files are in the same format, so it's simply a matter of moving the files into an existing CVS root. This assumes you have access to the RCS files.

# 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_



回答3:


As a general rule you should be careful as to what scripts you run. For RCS -> GIT it may be in your best interest to follow the RCS->CVS->GIT methodology.

Took a quick look at rcs-fast-export.rb as of 2011-01-12 and ran across this portion of the code. This is scary at best.

# 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|
...



回答4:


Just found this, which worked fine for me:

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

Just note that "cvs-source-dir" on that page needs to be a absolute path.




回答5:


I had this problem too and wrestled with cvs2svn, parsecvs and whatnot. parsecvs got the closest but Keith seems to have left it behind and now random forks are popping up. The problem I struck with it was it would parse the RCS files just fine but the last thing it did was git rm the file, so I would have had to muck around with git reset to undo the deletion.

Then I discovered mercurial's convert: https://www.mercurial-scm.org/wiki/ConvertExtension Problem solved!

I tried to incrementally add some stuff from separate RCS trees, it seems to have worked.



来源:https://stackoverflow.com/questions/1619737/migrate-project-from-rcs-to-git

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!