移动文件到另一个目录或者重命名并不困难,但是其中一些方法的工作方式并不是太明了。(移动和重命名目录更困难一些,[移动和重命名目录])。
下面的例子假设文件old被重命名为new。
移动一个文件的常规方法是把文件从old拷贝到new,然后使用CVS命令从源码库里删除old文件,并且把new文件添加进去。
$ mv old new $ cvs remove old $ cvs add new $ cvs commit -m "Renamed old to new" old new |
这是移动文件最简单的方法,而且不会出错,它还可以清楚地留下操作的记录。用户必须指定文件新的或者老的名称来访问纪录,这取决于用户想要访问哪一部分。例如,cvs log old命令将给出文件被重命名前的所有记录。
当文件以新new名称被提交以后,它的版本号将从1.1 开始重新分配。用户如果觉得这一点不便的话,可以在提交命令中使用-r rev选项。请参阅[分配版本号 在 第 4 章]一节获得更多细节。
当你移动的文件包含在源码库里时,这种做法是十分危险的。在动手之前,请完整地阅读这一节内容。
$ cd $CVSROOT/dir $ mv old,v new,v |
优点:
记录修改信息的日志文件会保持完整。
修订版本号不会受到任何影响。
缺点:
模块的旧版本将不会被轻易的从源码库中提取。(源码库里留下的文件是个新new文件,而相应的版本却是其改名之前的版本)。
当这个文件被改名时,将不会产生对应的日志信息。
如果在你移动这些历史文件的时候有人恰巧正在访问它,将会发生十分糟糕的事情。所以在移动这些文件的时候,请确保没有任何CVS命令会访问到这个文件。
这里同样包含了对源码库的直接修改,这样做是安全的,但并非没有坏处。
# 在源码库内部复制 RCS 文件 $ cd $CVSROOT/dir $ cp old,v new,v # 删除旧文件 $ cd ~/dir $ rm old $ cvs remove old $ cvs commit old # Remove all tags from new $ cvs update new $ cvs log new # Remember the non-branch tag names $ cvs tag -d tag1 new $ cvs tag -d tag2 new … |
去掉标签,你就能检出以前对该模块所作的修改。
优点:
检出旧版本工作正常,还可以用-rtag选项而不是-Ddate选项来回溯(retrieve)这些版本。
记载这些改变的日志保持完整。
这些版本号不受影响。
缺点:
透过改名很难看清文件的历史情况。