从SCCS迁移到Git

时间:2012-10-22 08:43:45

标签: git version-control solaris

我有一个在Solaris 10机器上运行的开发环境。使用的vcs目前是SCCS。计划将此环境移动到运行Solaris 11的新盒子。我正在考虑将此作为迁移到新的vcs系统的机会,很可能是Git。

我想知道这是一个案例,我们不得不在另一个盒子里重新开始,从旧盒子转储当前的回购或者是否可以保留回购历史?

我已经做了一些搜索SCCS到Git信息似乎很少。

感谢。

3 个答案:

答案 0 :(得分:3)

似乎有一个“SCCS2Git”脚本,提到here。这是在TODO部分,所以人们只能猜测它的状态,但是源代码是可用的,它是“最近”(在2015年)moved to GitHub,它在某种程度上得到了积极的维护(如:最近的提交)。如果你能弄清楚它是如何工作的,也许你可以尝试一下(显然是在备份之后)。

否则我可能会去一个不那么实验性的路线并先转换成别的东西。 Git与Subversion有很好的接口,似乎有很多从SCCS到Subversion的转换器,例如this。如果您设置了本地Subversion存储库,则可以快速导出数据,然后使用git-svn将其作为新的Git存储库导入。

答案 1 :(得分:2)

可以尝试执行 sccs2git 等脚本,尝试将完整历史记录导入新的Git仓库。

但是,最好检查一下这个旧版回购邮件的内容是否会在几个 Git repos(拆分)中得到最好的管理,如果只能导入最后一个有意义的标签(哪个缩短导入过程,同时将旧版存储库保持在只读模式下进行存档。

答案 2 :(得分:1)

这样做的必要性肯定越来越少,但我今天需要这样做,因为 1986 年的一个基于诅咒的程序。(令人惊讶的是,它只需要很少的调整就可以在现代系统上运行。)

>

我来这里是为了寻找答案,但前两个方法都不适合我,主要是因为链接到的脚本和实用程序未维护或不再存在。但是,我确实找到了一个很好的解决方案,所以我将它写下来,供任何仍然需要这样做的可怜人使用。

总体方案是SCCS -> RCS -> CVS -> git。不寻常的部分是从 SCCS 到 RCS,但 Eric Raymond 的 sccs2rcs 得到维护并且运行良好。它是一个仅使用核心库的 Python 脚本,因此易于安装并且将来不太可能被破坏。这取决于 sccsrcs 命令是否可用,但这些命令通常可通过第三方打包系统(例如发行版/自制软件)获得。在 sccs 的情况下,我使用了 CSSC

一旦您到达 RCS,这条路就会走得更远。要将包含 RCS 子目录的目录层次结构转换为 CVS 存储库,您只需将 ,v RCS 文件从这些子目录上移一级,并在顶部添加一个空的 CVSROOT 目录水平。

为了从 CVS 到 git,我使用了维护良好的 cvs2svn 实用程序(作为第三方软件包广泛可用)。它提供了一个 cvs2git 脚本,该脚本通过生成供 git fast-import 使用的 blob 来工作。它运行良好,但在如何配置方面有点古怪。您必须复制 cvs2git-example.options 文件并根据需要对其进行调整。我将 run_options.set_project 中的目录更改为 . 并将姓名添加到 author_transforms 中的作者映射中。

我将 RCS -> git 步骤与以下脚本结合在一起:

#!/bin/sh

set -e

MYDIR=$(dirname "$0")

# Move RCS files out of RCS subdirectories
find * -name RCS -type d |
while read RCS
do
    mv -i $RCS/*,v $(dirname $RCS)
    rmdir $RCS
done

# Create git import
mkdir -p CVSROOT
cvs2git --options="$MYDIR/cvs2git.options"
rmdir CVSROOT

# Import to git
git init -b master
cat cvs2git-tmp/git-blob.dat cvs2git-tmp/git-dump.dat | git fast-import
rm -r cvs2git-tmp
git reset --mixed

# Fix up $Id$ keywords
git ls-files | xargs -r sed --in-place '/$Id:/s/\([0-9]\)\//\1-/g'

# Back up RCS files
mkdir -p RCS-backup
find * -path RCS-backup -prune -o -name \*,v -print | cpio -pdml RCS-backup
find * -path RCS-backup -prune -o -name \*,v -print0 | xargs -0 -r rm -f

这可能适用于大多数人,但您确实需要通过编辑 cvs2git.options 包的 contrib 目录中的 cvs2git-example.options 副本来创建 cvs2svn