Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

cvs diff陷阱: 几乎人人会有的误解

Posted on 2009-09-17 12:34 Prayer 阅读(3514) 评论(1)  编辑 收藏 引用 所属分类: CVS

假设有这样一种情形, 在CVS的repository中存储了一个文件file.c, 你在星期一update到
了该文件的最新版本1.1.1.4, 在星期三的时候, 你还没动这个文件一根毫毛, 而
你的同事已经把版本号升级到了1.1.1.6, 此时你用下面的命令对你本地的file.c
进行比较:
cvs diff file.c
在刚开始接触CVS时, 几乎人人都认为此时的动作是cvs把你本地的文件跟服务器上的最新
版本进行比较. 并期望根据这个命令的输出结果来判断你本地的文件是否是最新版本.

事实上, 这个命令执行的是:
1. 在你本地保存的CVS管理文件中(CVS/Entries)找到这个文件对应的版本号是什
么, 或是哪个时间得到的这个文件, 这类信息被称为sticky信息, 也就是说这些信
息跟你的文件本身是如影随形的, CVS考虑你的文件时, 同时会考虑最后一次取得
该文件时的条件.
2. 根据前述找到的sticky信息, 从服务器上下载一份该sticky信息对应的那个版
本, 在上述的情况中, 仍然下载的是1.1.1.4版本, 因为我本地保存的file.c是
1.1.1.4版本.
3. 用diff工具进行比较

这样比较的结果当然是: 没有不同.

当然, cvs diff的其它工作方式并不象此处这样隐晦, 比如
cvs diff -r1.1.1.4 -r1.1.1.5 file.c
明确地比较这两个版本, 两个版本的文件内容都取自服务器.

错误的信息源于错误的愿望: 不能指望cvs diff filename 来判断你本地的文件是
否是最新版本, 判断这个的命令应该用
cvs status file.c
此时它的输出是 Needs Patch
而接下来把本地文件更新到最新版本的操作当然是
cvs update file.c



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=678715


Feedback

# re: cvs diff陷阱: 几乎人人会有的误解[未登录]  回复  更多评论   

2013-08-24 10:26 by 刘超
谢谢提醒,显式地思考能避免很多自以为默契的错误。

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理