提问人:Yogesh Devi 提问时间:7/13/2023 最后编辑:Yogesh Devi 更新时间:7/14/2023 访问量:48
CVS 到 Git 的转换使用 CVS2GIT ;如何优雅地解决错误“符号的多个定义”
cvs to git conversion using cvs2git ; how to resolve error "Multiple definitions of the symbol" elegantly
问:
我正在使用 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 脚本 但是,我的问题是
- 是符号的重复定义是什么,为什么它在那里 - 既然它如此普遍,似乎是合法的东西
- 为什么 cvs2git 不能处理它 - 我引起了“-retain-conflicting-attic-files”的启发,希望它能解决这个问题,但这无济于事
- 有没有解决办法
感谢您的帮助
答:
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 文件并按摩它们。值得庆幸的是,校验和的方式没有太多需要担心的。
评论