【问题标题】:Migrate project from RCS to git?将项目从 RCS 迁移到 git?
【发布时间】:2010-12-09 20:04:27
【问题描述】:

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

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

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


我仍然记得的没用的事情:

  • 在 CVS 源代码的 contrib 目录中提供的 rcs-to-cvs 脚本

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

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

【问题讨论】:

  • 如果您发现了许多行不通的方法,并且您正在寻找行之有效的方法,我认为列出行之有效的方法是明智之举'不工作,所以没有人浪费更多时间:)
  • 附带说明,有些人认为从 CVS(一旦你到达那里)到 git 的最佳方式是通过颠覆。 stackoverflow.com/questions/881158/…
  • 为什么有人保留历史?我是一名科学家和工程师,我研究软件。拥有20年历史的神器代表着不可替代的数据!
  • 阅读这篇文章后,我能够将一个 RCS 存储库(一个文件)转换为 git。对于新手,以下 Unix 命令可能会帮助您入门。确保安装了 ruby​​ 和 git。转到包含逗号-v 文件的目录(称为 file.txt,v 之类的文件)。键入“git --bare init”以创建一个裸 git 存储库。输入“ruby your/path/to/rcs-fast-export.rb | git fast-import”。
  • 当我将 RCS 存储库转换为 CVS 后,我刚刚创建了一个 CVS 存储库并将 RCS *,v 文件复制到其中。 CVS 存储库基本上是一个目录树,其中包含一堆 RCS 样式的 *,v 文件。 CVSROOT 目录很特殊,但它是在创建 CVS 存储库时创建的。

标签: git migration cvs rcs


【解决方案1】:

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

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

【讨论】:

  • 为 Norman 澄清一下,“快速导出”工具是用于跨 VCS 系统进行通信的现代事实标准,用于读取此数据的 git 工具称为 git fast-import
  • 不幸的是,这个工具用堆栈跟踪炸弹,从第 420 行的错误开始。这是我悲伤经历的典型。我有没有提到 RCS 的历史有 20 年?
  • 您是否尝试联系 rcs-fast-export 的作者?但是很可能它是作者的一次性转换工具,并且没有维护脚本。
  • 只要我导入一个新的/空的 git repo(正如命令行帮助所暗示的那样),对我来说效果很好。但如果这不起作用,听起来要走的路是git fast-import
  • 如果您按照命令行说明操作,此脚本将完美运行。谢谢!
【解决方案2】:

好的,经过一番修改,我发现将 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_

【讨论】:

    【解决方案3】:

    作为一般规则,您应该注意运行的脚本。对于 RCS -> GIT,遵循 RCS->CVS->GIT 方法可能符合您的最大利益。

    在 2011 年 1 月 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|
    ...
    

    【讨论】:

    • 这个术语可能很吓人,但这里没有 nefarios 发生。 RCS 使用 unix 用户名,而 git 想要“First Last ”样式名称。
    【解决方案4】:

    刚找到这个,对我来说很好用:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        在这里,我通过简单地将 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_
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-18
          • 1970-01-01
          • 2020-04-26
          • 1970-01-01
          • 2020-08-14
          • 2015-02-09
          • 1970-01-01
          相关资源
          最近更新 更多