45

我有一个20 年的项目,我想从 RCS 迁移到 git,而不会丢失历史。所有网页都表明唯一的真正途径是通过 CVS。但是经过一个小时的谷歌搜索并尝试了不同的脚本,我还没有找到任何可以成功地将我的 RCS 项目树转换为 CVS 的东西。我希望 Stackoverflow 的好人知道什么是真正有效的,而不是那些声称有效而无效的东西。

(我使用本地 SO 搜索和 Google 搜索搜索了 Stackoverflow,但如果数据库中有有用的答案,我就错过了。)

更新:http://git.oblomov.eu/rcs-fast-export 上的工具rcs-fast-export已于2009 年 4 月 14 日修复,这个版本似乎对我有用。此工具直接转换为 git,无需中间 CVS。谢谢朱塞佩和雅库布!!!


我仍然记得的不起作用的事情:

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

  • 2010 年 4 月 13 日之前版本中位于http://git.oblomov.eu/rcs-fast-exportrcs-fast-export工具

  • rcs2cvs在名为“CVS-RCS-HOW-TO Document for Linux”的文档中找到的脚本

4

6 回答 6

24

请参阅Git Wiki 上的InterfacesFrontendsAndTools页面,在“工具”、“与其他修订控制系统的交互”、“其他”中。在那里,您可以找到Giuseppe "Oblomov" Bilotta的rcs-fast-export ( gitweb ) Ruby 脚本的描述和链接。

(网络搜索还可以找到 Ohloh 页面和提到的项目的公告)

于 2009-10-25T11:32:47.857 回答
1

好的,经过一番修修补补,我发现将 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_
于 2015-08-19T22:22:21.350 回答
0

刚刚发现这个,对我来说很好用:

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

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

于 2015-01-16T14:01:43.020 回答
0

作为一般规则,您应该小心您运行的脚本。对于 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|
...
于 2011-03-06T22:34:32.607 回答
0

我也遇到了这个问题,并与 cvs2svn、parsecvs 和诸如此类的东西搏斗。 parsecvs最接近,但 Keith 似乎把它抛在了后面,现在随机分叉正在弹出。我遇到的问题是它可以很好地解析 RCS 文件,但它做的最后一件事是git rm文件,所以我不得不费力git reset地撤消删除。

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

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

于 2010-04-15T01:20:26.030 回答
0

在这里,我通过简单地将 RCS 转换为 CVS,然后将 CVS 转换为 Git 来详细说明 Edward Falk 的答案。此示例使用git-cvsimport从 CVS 转换为 Git,但任何其他 CVS 到 Git 的转换方法都应该有效。

mkdir $HOME/mydir/  # Any directory name will do.
cd $HOME/mydir/
cvs -d $HOME/mydir/ init

# Trivially import an RCS project into CVS.
cp -a /path/to/_projectname_/RCS $HOME/mydir/_projectname_

# Convert the CVS project to Git.
git cvsimport -d $HOME/mydir/ -C mynewgitrepository _projectname_
于 2021-10-30T03:25:50.570 回答