从 SCCS 迁移到 Git

问题描述 投票:0回答:4

我有一个在 Solaris 10 机器上运行的开发环境。 当前使用的 vcs 是 SCCS。 计划将此环境迁移到运行 Solaris 11 的新机器。我想以此为契机迁移到新的 vcs 系统,最有可能是 Git。

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

我搜索了一些 SCCS to Git 信息似乎相当匮乏。

谢谢。

git version-control solaris
4个回答
3
投票

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

否则我可能会采取较少实验的路线并首先转向其他东西。 Git 有一个很好的 Subversion 接口,并且似乎有很多从 SCCS 到 Subversion 的转换器,例如 this。如果您设置本地 Subversion 存储库,您可能可以快速导出数据,然后使用 git-svn 将其导入为新的 Git 存储库。


2
投票

可以尝试执行像sccs2git这样的脚本,尝试将完整历史记录导入到新的Git存储库中。

但是,最好检查一下旧存储库的内容是否无法在多个 Git 存储库(拆分)中得到最佳管理,以及是否只能导入最后一个有意义的标签(这会缩短导入过程) ,同时将遗留存储库保持为只读模式以进行存档。


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

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

总体规划是SCCS -> RCS -> CVS -> git。不寻常的部分是从 SCCS 到 RCS,但 Eric Raymond 的

sccs2rcs 得到了维护并且运行良好。它是一个仅使用核心库的 Python 脚本,因此易于安装并且将来不太可能损坏。这取决于是否有可用的 sccs

rcs
 命令,但这些命令通常可以通过第三方打包系统(例如发行版/自制软件)获得。对于 
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


0
投票
在第一次问这个问题之前,James Youngman 已经编写了

git-sccsimport

,一个 Python 脚本,旨在 
“将 SCCS 文件中的增量集体导入 git”,又名 “SCCS 文件的快速 git 导入器。”

此后我对这个脚本进行了一定程度的维护和增强,并继续使用它对我仍然使用 SCCS 维护的几个存储库进行定期迁移(包括

git-sccsimport

 本身的存储库):

https://github.com/robohack/git-sccsimport

几年前,作为一次更大规模的测试,我使用此脚本对 CSRG BSD Unix SCCS 文件进行转换,以创建以下存储库:

https://github.com/robohack/ucb-csrg-bsd

© www.soinside.com 2019 - 2024. All rights reserved.