我有一个在 Solaris 10 机器上运行的开发环境。 当前使用的 vcs 是 SCCS。 计划将此环境迁移到运行 Solaris 11 的新机器。我想以此为契机迁移到新的 vcs 系统,最有可能是 Git。
我想知道我们是否必须在另一个盒子上重新开始,从旧盒子中转储当前存储库,或者是否可以保留存储库历史记录?
我搜索了一些 SCCS to Git 信息似乎相当匮乏。
谢谢。
您可以尝试执行像sccs2git这样的脚本,尝试将完整历史记录导入到新的Git存储库中。
但是,最好检查一下旧存储库的内容是否无法在多个 Git 存储库(拆分)中得到最佳管理,以及是否只能导入最后一个有意义的标签(这会缩短导入过程) ,同时将遗留存储库保持为只读模式以进行存档。
我来这里寻找答案,但前两个都不适合我,主要是因为链接的脚本和实用程序未维护或不再存在。然而,我确实找到了一个很好的解决方案,所以我把它写下来,供那些仍然需要这样做的可怜的人使用。
总体规划是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
。