5

我有一个在 Solaris 10 机器上运行的开发环境。当前使用的 vcs 是 SCCS。计划将此环境转移到运行 Solaris 11 的新机器上。我正在考虑利用这个机会转移到新的 vcs 系统,很可能是 Git。

我想知道我们是否必须在另一个盒子上重新开始,从旧盒子中转储当前回购,或者是否可以保留回购历史?

我做了一些搜索 SCCS 到 Git 的信息似乎相当稀缺。

谢谢。

4

3 回答 3

3

似乎有一个“SCCS2Git”脚本,在这里提到。它在 TODO 部分,所以只能猜测它的状态,但是源代码是可用的,并且它“最近”(在 2015 年)被移到了 GitHub 上,在那里它得到了一些积极的维护(例如:有最近的提交)。如果你能弄清楚它是如何工作的,也许你可以试一试(显然在备份之后)。

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

于 2012-10-22T08:54:09.697 回答
2

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

但是,最好检查该遗留存储库的内容是否不能在多个Git 存储库(拆分)中得到最佳管理,以及您是否只能导入最后一个有意义的标签(这使得导入过程更短),同时保留用于存档的只读模式下的旧版存储库。

于 2012-10-22T08:52:10.463 回答
1

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

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

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

到达 RCS 后,这条路将更加成熟。要将包含RCS子目录的目录层次结构转换为 CVS 存储库,您只需将,vRCS 文件从这些子目录中上移一层,并CVSROOT在顶层添加一个空目录。

为了从 CVS 转到 git,我使用了维护良好的cvs2svn实用程序(作为第三方软件包广泛使用)。它提供了一个cvs2git脚本,该脚本通过生成供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副本来创建。cvs2git-example.optionscvs2svn

于 2021-04-03T14:58:38.243 回答