这样做的需求越来越少,但我今天需要为一个来自1986年的基于curses的程序这样做。(出乎意料的是,只需要很少的调整就可以在现代系统上运行。)
我来这里寻找答案,但前两个答案都对我没用,主要是因为链接到的脚本和实用程序已经无人维护或不存在。然而,我找到了一个好的解决方案,所以我写下来给那些仍然需要这样做的可怜人。
总体计划是SCCS -> RCS -> CVS -> git。不寻常的部分是从SCCS到RCS,但Eric Raymond的
sccs2rcs得到维护并且工作良好。它是一个使用核心库的Python脚本,因此易于安装并且不太可能在将来发生故障。它取决于有
sccs
和
rcs
命令,但这些通常通过第三方包装系统(例如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")
find * -name RCS -type d |
while read RCS
do
mv -i $RCS/*,v $(dirname $RCS)
rmdir $RCS
done
mkdir -p CVSROOT
cvs2git --options="$MYDIR/cvs2git.options"
rmdir CVSROOT
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
git ls-files | xargs -r sed --in-place '/$Id:/s/\([0-9]\)\//\1-/g'
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标签。
here
返回了一个404
。 - Fed