从SCCS迁移到Git

5
我有一个运行在Solaris 10系统上的开发环境,目前使用的版本控制系统是SCCS。计划将该环境迁移到运行Solaris 11的新系统上。我考虑利用这个机会将其迁移到新的版本控制系统,最可能的是Git。
我想知道我们是否需要只能从旧系统导出当前repo的内容并在新系统上重新开始,还是有可能保留repo的历史记录?
我查了一些资料,似乎很难找到关于SCCS转换为Git的信息。
谢谢。
3个回答

3

这里似乎有一个名为“SCCS2Git”的脚本,在这里提到过。它在待办事项中,因此只能猜测其状态,但源代码可用,而且它已经“最近”(2015年)移至GitHub,在那里得到了一些积极的维护(也就是说:有最近的提交)。如果你能弄清楚它如何工作,也许可以试试(在备份后)。

否则,我可能会选择更少实验性的路线,先转换成其他格式。Git与Subversion有很好的接口,而且似乎有很多从SCCS到Subversion的转换器,例如这个。如果您设置了本地Subversion存储库,您可以快速导出数据,然后使用git-svn将其导入为新的Git存储库。


就像svn的中间迁移路径。+1 - VonC
1
谢谢poke,我认为SCCS>SVN>Git可能是最好的行动方案。我会研究一下这个。 - Apollo
这个链接下面的 here 返回了一个 404 - Fed

2
您可以尝试执行像sccs2git这样的脚本,尝试将完整的历史记录导入到新的Git存储库中。
然而,最好检查一下那个遗留代码库的内容是否最好分成几个Git存储库(拆分),并且如果您只能导入最后有意义的标签(这将使导入过程更短),同时将遗留代码库保持为只读模式以进行归档。

+1 提到了仓库布局。我没想到过这一点——但话说回来,我对SCCM一窍不通 ;) - poke
在第91行,我不得不将时区值除以36:$tzoffset->($delta{stamp}) / 36。我得到的数字是-18000,而应该是-0500(对于CDT)。否则,git会抛出致命错误。 - pedz

1
这样做的需求越来越少,但我今天需要为一个来自1986年的基于curses的程序这样做。(出乎意料的是,只需要很少的调整就可以在现代系统上运行。)
我来这里寻找答案,但前两个答案都对我没用,主要是因为链接到的脚本和实用程序已经无人维护或不存在。然而,我找到了一个好的解决方案,所以我写下来给那些仍然需要这样做的可怜人。
总体计划是SCCS -> RCS -> CVS -> git。不寻常的部分是从SCCS到RCS,但Eric Raymond的sccs2rcs得到维护并且工作良好。它是一个使用核心库的Python脚本,因此易于安装并且不太可能在将来发生故障。它取决于有sccsrcs命令,但这些通常通过第三方包装系统(例如distro/homebrew)提供。在sccs的情况下,我使用了CSSC
一旦到达 RCS,路径就会更加熟悉。要将包含“RCS”子目录的目录层次结构转换为 CVS 存储库,您只需要将“,v”RCS 文件向上移动一个级别,从这些子目录中添加一个空的“CVSROOT”目录到顶层。
为了从 CVS 转到 git,我使用了维护良好的 cvs2svn 实用程序(作为第三方软件包广泛可用)。它提供了一个“cvs2git”脚本,通过生成 blob 供“git fast-import”使用来工作。它运行良好,但在配置时有点古怪。您必须复制“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

这对大多数人来说可能有效,但您需要通过编辑软件包的contrib目录中的副本来创建cvs2git.options。请保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接