使用CVS2SVN(v2.5.0)转换CVS到SVN遇Attic目录冲突错误求解决方案
解决CVS2SVN转换时“同一文件同时存在于实际路径和Attic目录”的错误
这个问题我之前帮团队处理过,本质是你的CVS仓库出现了数据不一致——正常情况下,CVS只会把被删除的文件移到Attic目录,同一个文件绝对不会同时出现在原路径和Attic里。这种情况一般是CVS历史操作异常(比如手动移动文件、仓库同步故障)导致的,下面是具体的解决步骤:
第一步:排查两个文件的版本历史
先通过CVS命令分别查看两个文件的版本日志,搞清楚哪个是有效版本,哪个是冗余的:
# 查看原路径文件的历史 cvs log -l c:\mycvs\programs\path\files\MyTest.java,v # 查看Attic目录下文件的历史 cvs log -l c:\mycvs\programs\path\files\Attic\MyTest.java,v
对比两个日志:
- 如果
Attic里的文件是很早之前被删除的版本,而原路径的文件是后来恢复或继续维护的,那Attic里的就是冗余文件。 - 如果原路径的文件是意外残留(比如删除操作没完成),而
Attic里的是正确的删除状态,那原路径的文件是冗余的。
第二步:清理冗余文件
操作前务必备份整个CVS仓库,防止误删重要数据!
- 确认冗余文件后,直接删除对应的
.v文件即可:比如确定Attic里的是冗余,就删除c:\mycvs\programs\path\files\Attic\MyTest.java,v;反之则删除原路径的文件。 - 如果两个文件都包含有用的历史(这种情况极少),你需要手动合并版本日志,不过这个操作比较复杂,建议先备份后,尝试先删除其中一个,看转换是否能正常完成,再根据结果调整。
第三步:验证仓库并重新转换
清理完成后,先验证CVS仓库的完整性:
cvs check -C c:\mycvs
如果没有报错,再重新运行cvs2svn工具进行转换。
内容的提问来源于stack exchange,提问作者jprism
相关产品推荐
相关产品推荐

