如何在无CVS元文件的现有目录中执行CVS Checkout?
解决CVS在已有目录无元文件时checkout失败的问题
问题背景
脚本会先创建目录并写入日志,之后尝试checkout部分CVS文件到该目录。但首次运行时,因目录缺少CVS元文件夹及文件(如CVS/Entries),checkout操作失败。
测试场景验证
- 删除
module目录后,执行cvs.exe checkout module/module.prj:自动重建目录及带元文件的CVS子文件夹,checkout成功;重复执行也正常。 - 仅删除
module/CVS子文件夹(模拟脚本先创建目录的场景),再次checkout失败;删除module.prj后重试,仍失败。
解决方案
CVS没有直接的开关让checkout自动补全已有目录的缺失元文件,但可以用以下两种方法解决:
方法1:先初始化目录的CVS元数据
如果目标目录已存在,先进入目录执行cvs checkout -l <模块名>生成元文件,再checkout目标文件:
cd module cvs checkout -l module cd .. cvs checkout module/module.prj
-l参数表示仅在当前目录执行操作,不递归子目录,会自动创建CVS子文件夹及所需的Entries、Repository等元文件。
方法2:用update命令强制同步
进入目标目录后执行update命令,自动补全元文件并同步目标文件:
cd module cvs update -d -C module.prj
-d:创建仓库存在但本地缺失的目录-C:强制用仓库版本覆盖本地同名文件(如果有)
测试验证
针对之前的失败场景用方法2测试:
$ rm -vrf module/CVS removed 'module/CVS/Entries' removed 'module/CVS/Entries.Static' removed 'module/CVS/Repository' removed 'module/CVS/Root' removed directory 'module/CVS' $ rm -v ./module/module.prj removed './module/module.prj' $ cd module $ cvs update -d -C module.prj cvs update: Updating . U module.prj
执行后自动重建CVS子文件夹及元文件,成功同步module.prj。
内容的提问来源于stack exchange,提问作者SSilk
相关产品推荐
相关产品推荐

