CVS 到 Git 的转换使用 CVS2GIT ;如何优雅地解决错误“符号的多个定义”

cvs to git conversion using cvs2git ; how to resolve error "Multiple definitions of the symbol" elegantly

提问人:Yogesh Devi 提问时间:7/13/2023 最后编辑:Yogesh Devi 更新时间:7/14/2023 访问量:48

问:

我正在使用 cvs2git 版本 2.5.0。 我有一个旧的 CVS 存储库,我正在尝试将其转换为 git 存储库。 我运行了cvs2git命令,如下所示

cvs2git --blobfile=git-stage/git-blob.dat --dumpfile=git-stage/git-dump.dat --keep-cvsignore  --retain-conflicting-attic-files --encoding=ascii --encoding=utf8 --encoding=utf16 --fallback-encoding=utf8 cvsroot

这次运行给了我一堆错误,如下所示

enter code here
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename1,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename1,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename1,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename1,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename2,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename3,v': 1.1.1.1 1.1.1
ERROR: Multiple definitions of the symbol 'MYSYM' in 'cvsroot/path/filename4,v': 1.1.1.1 1.1.1

我检查了抛出此错误的文件,这是我在文件开头看到的

head     1.1;
branch   1.1.1;
access   ;
symbols  MYSYM:1.1.1.1 MYSYM:1.1.1;
locks    ; strict;
comment  @# @; ...

我考虑的一个选项是使用 cvs2git 的 --exclude 选项,但我不想遗漏这些文件;他们太多了——数千...... 我正在考虑采用的另一种可能的解决方法是删除一个定义 - 通过编写爬虫和 sed 脚本 但是,我的问题是

  1. 是符号的重复定义是什么,为什么它在那里 - 既然它如此普遍,似乎是合法的东西
  2. 为什么 cvs2git 不能处理它 - 我引起了“-retain-conflicting-attic-files”的启发,希望它能解决这个问题,但这无济于事
  3. 有没有解决办法

感谢您的帮助

git cvs cvs2svn cvs2git

评论


答:

0赞 Yogesh Devi 7/14/2023 #1

让我澄清一下 - 这并不完全是我正在寻找的答案.它只是一种解决方法,可以让我继续进行转换

我在这里发帖,这样可以解除对像我一样被屏蔽的人的屏蔽。

我仍然在寻找一个优雅的答案——所以这个“答案”不被接受

对于我的解决方法,我编写了一个脚本,该脚本遍历了数千个 cvs 文件“cvsroot/path/filenamex,v”,并使用 sed 删除了重复的定义

for fname in  \
cvsroot/path1/path2/file1,v  \
# thousands of files \
do 
 echo "processing $fname"
    sed -i "s/mysim:1.1.1.1//g" $fname
    sed -i "s/MYSIM:1.1.1.1//g" $fname
done

因此,我从 CVS 文件中删除了两个定义中的一个,此后 cvs2git 可以继续并完成工作

评论

1赞 Mort 7/20/2023
这看起来是一个不合理的解决方案。当我这样做时(很久以前),我们已经用 CVS 做了一些“聪明”的事情,我们必须撤消(或者至少让 git 可以识别),是的,我们只是进入 ,v 文件并按摩它们。值得庆幸的是,校验和的方式没有太多需要担心的。