1. 你从CVS 上check out一个文件,过些时日之后,你想知道这个文件是否有其它人修改过了,最直观的想法就是用cvs diff, 毕竟diff命令是比较两个文件是否不同的:
cvs diff your_file
如果什么输出也没有,你还许安心地认为这段时间没人动过这个文件,错!cvs diff 默认比较的是你从cvs上checkout 下来的那个文件与CVS仓库中同样修订号的那个状态是否一致,它只能用来判断你自己checkout 下来之后本地的那个文件有没有跟仓库中对应同样修订号的版本有无不同,也就是说只能反映出你自己的修改行为.
要检查该文件的状态,其实应该用cvs status filename 命令,它会反映出这个文件是Up-to-date,还是Locally Modified(就是你自己修改过了), 还是Needs Patch(你自己没改,但其它人自你check out或最近的update之后,提交了新版本), 还是Needs Merge(别人也改了,你自己也改了,既要两者合并).
cvs diff的命令只用在查看具体有哪些不同上.
2. add 一个文件只是在本地目录中进行操作,在该文件所在的文件夹下的CVS目录中的Entries文件中新增加一个记录行,作用只是为了后续的commit操作知道哪些文件是需要新增到CVS仓库中去的. 与新加文件不同,新加一个目录则是直接在CVS仓库中加入一个目录,不需要后续的commit动作.
使用者会自然地希望有一个功能可以把一个目录及其下的所有内容添加到CVS上进行管理,然而这却是一个不可能的奢望. 你必需手工递归地想办法先添加目录,再添加文件.
3. cvs ci -m "" 无法简单地在命令行上输入多行注释. 只能用$'line 1\nline 2' 这样的最新bash扩展功能(3.0才有), 在wincvs的窗口中看到它生成的命令行是"...\n....", 所以天真地认为自己照这样写就也能在命令上行输入多行的注释,一试不行. wincvs中可以在一个窗口输入界面中键入多行的注释,但它的命令执行输出窗口中显示出来的命令却不一定是真正能让你原封不动COPY&PASTE到命令行窗口中如法泡制的. 可能通过 cvs ci -m $(echo -n "...\n...") 也可以输入多行注释.如果可以的话在bash的低版本中就也可以以此办法替代更文便的$'...\n...' 方案了.
4. 象cvs ls 这样很常用的命令竟然是很长时间内缺少的一个命令. red hat 9上默认安装的cvs仍然不支持该命令.
5. cvs log 这样的输出默认竟然不是按check in时间排序的,而且根本没有这样的选项.
6. cvs 命令没有对CTRL-C 这样的信号进行安全的处理,导致有些情况下中断一个正在处理中的CVS命令会导致本地CVS管理目录下的内容与远程仓库中的不一致,后续的cvs命令报些奇怪的错误. 比如添加一个目录时,可能出现要新添加的目录已经在本地CVS管理目录下被记入Entries文件,但在远程仓库中尚未来得及去创建,导致这样的情况出现:
- 添加一个目录时提示该目录已被添加
- 用cvs ls查看该目录时却发现没有列出该目录
原因就在于说目录已被添加的错误信息是仅仅根据本地管理信息做出的判断.
阅读(892) | 评论(0) | 转发(0) |