假設有這樣一種情形, 在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