Wednesday, November 16, 2011
cvs 檔案損毀
昨天 CVS 系統出現ext3 的node錯誤的message ,大驚, 所以盡快換了一顆硬碟, 把檔案覆製好後以為安全了, 結果今天陸續傳回災情, 某些binary 檔案無法用WinCVS log or graph, 出現下面的些log
cvs log -- xxx.dll ( in directory x:\xxx\ )
cvs [log aborted]: premature end of value in /cvs/xxx/xxx.dll,v revision 1.187
搞了老半天, 最後只好把1.187 這個版本直接從 xxx.dll,v 這個檔案裡砍掉, 總算解了這個問題
但又接到幹譙信, 換另一個檔出問題, 再查這次就慘了, 出現下面這個LOG
cvs log -- xxx.dll (in directory x:\xxx\)
cvs [log aborted]: unexpected '\x5e' reading revision number in RCS file /cvs/xxx/xx2.dll,v
沒有地方可以查問題出在哪, google 大神請出來拜了N回了, 還是找不到修復的程式, 有點欲哭無淚, 後來有找到原來cvs 的套件裡已檢查檔案是否損毀的script
一般應該放在這
/usr/share/cvs/contrib/check_cvs
需要先設定CVSROOT
export CVSROOT="/cvs/xxx" <-設成你的CVSROOT
如果想要show多一點information 就再設 CVSDEBUGEDIT 變數
export CVSDEBUGEDIT=1
如果是在windows 下的, 記得把export 改成 setenv
然後執行就可以列出損毀的檔案了..可以檢查災情....
然後.... 然後.. 沒有救檔的程式嗎? 靠夭勒.. 沒有....... 看來又得再一一比對了..!!
如果知道自動修的檔案, 記得通知我一下..!!
Monday, February 11, 2008
WinCVS 2.x FAQ (3) TortoiseCVS 與WinCVS可以並存嗎
Q: TortoiseCVS 與WinCVS可以並存嗎~~~?
不會衝突嗎@@?
因為我看烏龜會建立一個cvs的隱藏目錄來坐cvs的控管(or紀錄)
wincvs也是用同一個嗎?
還是他自己用自己的?
A: FAQ (2) 時提到WinCVS 其實並沒有自己的CVS控制程式,他只是GUI程式,與CVS Server 溝通的部份都交由CVSNT來做, 而TortoiseCVS 也是一樣, 只是它直接在安裝時期直接安裝了, 所以兩者一樣是由CVSNT來做與CVS Server 溝通的主程式, 而CVS的隱藏目錄其實是CVSNT所產生的
既然講到CVS這個隱藏目錄, 本文就順便說明這個目錄的功用, 每個目錄下, 都會有一個CVS的隱藏目錄, 裡面可以看到主要是4個檔案
Root : 這個檔案是記錄這個目錄是由哪個CVS Repository 所存取出來的
Repository : 這是記錄是Root 所記載的CVS Repository 裡的哪個目錄
Entries : 這是記錄這個目錄下所有的檔案在Server 上的資訊, 這個内容主要是在離線時可以判段檔案是否被修改的重要資訊, 不論是Tortoise CVS或是WinCVS 只要檔案內容被修改, 就立即可以看到圖示的變化, 就是TortoiseCVS 與WinCVS 利用這個檔案真實的修改時間, Entries裡記錄的時間比較所產生的, 而這裡所記錄的版本編號, 則是與CVS Server 比對時的重要資訊
Entries.Extra : 我實在不太清楚這個檔案的用意, 以它的內容來看, 似乎是精簡版的Extries
結論就是, 兩者完全可以同時並存並交叉使用, 我喜歡利用WinCVS來做整個專案時的版本比對, 因為它可以完整看出所有這個目錄的檔案版本編號與它的TAG, 但是TortoiseCVS就沒辦法,但是在單一檔案處理上, TortoiseCVS就相當方便, 因為它直接在檔案總管理就可以直接diff/commit/update 了, 所以相當方便 ,所以不要介意, 兩個程式都給它裝上去吧
PDF File 已更新
WinCVS 2.x PDF 下載
Saturday, February 02, 2008
WinCVS 2.x FAQ (2) 安裝WinCVS一定要裝CVSNT嗎?
Q:A :
我怎麼設定CVSROOT的畫面都不能修改。然後出現Unable to initialize the CVS process: 系統找不到指定的文件。 The CVS used is : cvs.exe 的字樣。請問這是怎麼回事。我安裝時沒裝cvsnt。因為Server在另台機器。
WinCVS 其實只是一個GUI, 讓操作CVS Client 的動作容易, 但其實與CVS Server溝通的部份,還是由cvs.exe (註1)所執行的, 不過1.x版的WinCVS 是使用cvs Windows 版的執行檔, 並且直接放在安裝檔裡, 所以當安裝完WinCVS後直接就可以使用, 但是2.x版本之後, WinCVS開始選用CVSNT(註 2), 也因此將兩者分開安裝
雖然下載WinCVS安裝檔已經內含CVSNT的安裝, 但確是分兩個步.驟裝, 所以常會有人因此不知所措, 解決的方法是, 重新Download CVSNT(下載2.5.03.2382),然後到Admin->Preferences 裡的CVS Tab 設定
1. 將Alternate CVS excutable 的選項勾起來2. 指向CVSNT 的cvs.exe 位置
這樣就可以正常執行了
註1: cvs本身是Server client, 端看你怎麼用, WinCVS還可以使用local 的mode來控制單機上的版本控制, 就是這樣來的,這部份我還會另文探討
註2: CVSNT 是一個原始cvs 的後續版本, 我記得當初好像是因為cvs對於windows的檔名support 的進度緩慢, 所以才會有人使用patch 的方式更新, 後來才獨立出來成立CVSNT 的專案, 加強一些CVS沒有的功能的擴充, 像是SSH的密碼認証, 或是unicode的支援, 雖然名為CVSNT但其支援的平台與CVS一樣, 從windows ,Linux ,到Mac OS都有
Tuesday, January 29, 2008
WinCVS 2.x 說明 PDF 下載
不過開始有些網友會問到一些應用的問題,真是讓我覺的至少有點價值吧, 我最近整理的目前BLOG中所有的WinCVS文章, 並做個整理轉成單一的PDF File, 供需要的網友下載
此份文件也會隨著我增加內容而更新
WinCVS 2.x PDF 下載
Sunday, December 09, 2007
WinCVS 2.x 快速進階 (十) Tag(全域標註)
CVS 是以檔案為基準的版本編號系統, 如圖中可以看出隨著程式的持續更新, 不一定每一次都會修改所有的檔案, 所以會出現檔案版本不同的情況, 所以當我們整個程式的版本後, 需要反查時, 會出現無法追朔所發行過版本的詳細在CVS 上每個檔案的版本, 所以CVS 利用Tag 來解決這個問題
圖中因為要整個目錄都要標示全域標註, 所以我直接選擇目錄,然後選擇紅色框的T字樣的圖樣以加入全域標註(綠色的為移除Tag), 點如後出現設定頁
我以圖內所標示數字的部份做說明
1. new Tag name : 輸入TAG的名字, 最好不要中文, 而且不能用'-', 所以我都以'_'底線來做為版本中'.'點的功能, 在這個例子我輸入了Build_1_2_0_0
2. 點入後, WinCVS會掃描整個CVS中的TAG, 可以方便輸入, 這部份常用於移動TAG 的時候
3. Do not recurse into sub-direcoties : 如果選取此設定,將不會設定這個目錄中的所有子目錄裡的檔案為此TAG
4. Allow move/delete of branch tag (not recommended) : 這個選項是允許覆蓋或刪除branch(分歧)的標註, 這個部份我會再接下來的文章裡說明,CVS 使用相同介面處裡 Branch 與 Tag, 但是Branch 只要一誤用, 影響的將是整個分岐出來的部份, 所以WinCVS善意的在後面提醒"不建議使用", 我通常不勾選, 這樣一來當我將TAG取名與branch 同名是,就不會出現誤蓋
5.Check that the files are unmodified before tagging : 這個選項建議勾選, 他可以檢查是否有被修改(modified)過的檔案被執行Tag, 因為如果被Tag, 將會是這個被修改的檔案最後的版本編號, 例如Filea.cpp 檔案編號為 1.4, 但我已經修改這個檔案了, 但確沒有commite(這時WinCVS會以紅色標示), 當我加Tag時則會為1.4 而不是commit這個修改後的1.5, 所以在執行前檢查, 就可以確保自己想要Tag的是修改前的1.4 or修改後的 1.5
6. Overwrite existing tags with the same name : 是否覆蓋舊的同名TAG, 如果勾選則覆蓋, 通常我是不勾選此功能, 主要是希望能自動確定我所要設定的版本之前沒有設為, 例如我想要設Build_1_2_0_0,但是這之前設過了, 如果沒有勾選此功能,則會停止Tag, 並提示錯誤, 但是如果是要搬移Tag 時, 我就會這樣勾選, 以確定將舊有的TAG 中記錄的檔案編號更新
在確定之後, 我們可以看到所有檔案都Tag 了
那要如何取出這個TAG 的檔案呢?, 當然利用update 摟
圖中黃色框的地方勾選後, 輸入所欲讀取的TAG, 我們輸入剛才加入的Build_1_2_0_0, 確定之後
WinCVS 的檔案窗裡可以看到tag 這欄為Build_1_2_0_0, 我們已經成功取出Build_1_2_0_0 這個TAG 的檔案了
Wednesday, November 14, 2007
WinCVS 2.x FAQ (1) CVS會產生LOG檔嗎?
Q : CVS會產生LOG檔嗎?
比如說我今天增加了某的檔案或是提交什麼
會在伺服器留下紀錄嗎?
A:
CVS 是版本記錄器, 當然會留下記錄, 不過要怎麼看呢, 可以利用LOG指令
在所需要看版本的檔案下滑鼠右鍵, 點選LOG
你就可以看到每個版本的commit(提交 ) 時間與記錄了, 不過這也是CVS為人垢病的地方, 他是以檔案變動為基準來記錄, 但通常一次更新都不會只更新一個檔案, 都是一批檔, 我又要怎麼知道我一段時間內所變動的檔案呢, 答案是, 透過外部Marco 功能來補強我曾在 WinCVS 2.x 的快速入門 安裝篇 裡有提醒安裝時要記得勾選一下"Deprecated, Old Macros", 現在可要派上用場了, 因為WinCVS長久下來有很多人寫了所謂的外掛, 之前是用TCL所寫的, 在某個版本後改為Python, 裡面就有功能可以幫助我們建立整體的Log

先點選所要得到Log的目錄, 然後到Macro 找到 Build ChangeLog, 點入後稍等一下
可以看到多出一個ChangeLog 的檔案, 打開就可以看到, 8/12 只有更新一個File, 但7/30幾乎大改版
Wednesday, September 26, 2007
WinCVS 2.x 快速入門 (九) Update (更新)
在我開始要寫 Log 與Graph時重看了這一系列文章時, 才猛然發現, 我竟忘了寫Update, 不會吧.. 這是CVS 最重要的功能, 我一定是一開始寫Checkout Module時以為我寫過了, 所以讓我來補足這一篇吧.!!
將Update 說成CVS最重要的功能一點也不誇張, CVS 是個版本控制器, 你可以透過log來查看你所有的版本, 可以用diff來比較不同版本, 可以用commit 來上傳不同版本, 但你一定要透過update 這功能才能真正使用不同的版本的程式碼
Update 的功能在於將CVS Server 上的程式碼下載到Local的電腦來, 與Checkout Module 不同的是, Checkout 是將整個module 都下載, 但update可以只下載一個檔案, 到一整個目錄, 當然也可以一整個module
按下滑鼠右鍵, 點入Update

Update Settings 有三個設定
1. Do not recurse into sub-folders : 此功能一勾選, 則只會針對這個目錄裡的檔案進行更新, 而不會將這個目錄裡的子目錄內的檔案一起更新
2. Create missing directories that exist in the repository : 當CVS Server 上有使用者在你選擇Update的目錄裡增加目錄, 需要勾選這個功能, WinCVS才會幫你加入這個目錄, 不然的話只會針對新增的檔案更新與加入, 並不會加入新的目錄
3. Get the clean copy : 取得與CVS Server 相同的檔案版本, 此功能一經勾選, 會將Local的檔案與CVS Server 完全同步, 所以被更動的檔案將被刪除(會備份)

Update options :
我只解釋幾個常用的
1. Reset any sticky tags/date/kopts :
會將原來設定的tag清除, 完全更新成目前CVS 最新的文件
2. By date: 可以設定你要更新的程式碼是在某個日期之前的最新程式碼
3. By revision/tag/branch : 更新成某個Branch 或是Tag

接下來我用case stady 的方式來解釋Update的使用時機說明並圖解.
1. 更新Local的程式碼到CVS 最新的程式碼 : 這個使用時機常是在要開始更改檔案前, 先update 一下, 讓你手上的程式碼是最新的, 再開始改, 避免改完後發現你改的不是目前最新的code,還要做merge
如圖可以看出來, AddRecordDlg.cpp 為1.5 而AddRecordDlg.h則被修改過
當我勾選"Get the clean copy " 後, 下圖可以看到, 多了一個#AddRecodDlg.h.1.5 就是原來的AddRecordDlg.h的備份, 而可以看到AddRecordDlg.cpp 已經更新為1.6, 代表距離我們上次更新的時間, 有人Commit了新的AddRecordDlg.cpp 到CVS Server
2. 下載特定版本/日期/TAG的程式碼到Local : 這是在你需要下載某個tag 或是某個branch 的code時的方式, 與checkout 不同是WinCVS會做比較, 如果檔案相同的, 雖然分屬不同tag 或 branch, 也不會重新下載, 所以速度較快
當我們勾選 "By revision/tag/branch" 後可以填入所需要的Tag, 以取這個Tag 的程式碼
由下圖可以發現, 我們已經Update 了這個Tag 的檔案了
我們也可以勾選 "By date" 來取出某個日期之前的最新版本的程式碼
所得到的就是那個日期的程式碼, 不過因為CVS Server 是採UTC時間, 而WinCVS填入的是當地時間, 以台灣來講是UTC+13, 所以會造成日期看起來有點出入
3. 清除之前下載所設定的版本,回到最新版: 當經過上面說明的步驟後, 不論你怎麼update 都會之前所設定條件的最新版本, 所以要回到沒有認何條件的檔案就必需在Update時勾選 "Reset any sticky tags/date/kopts " 這個選項
相關連結
CVS (Concurrent Versions System) 協作版本系統Monday, September 03, 2007
CVS (Concurrent Versions System)協作版本系統
在寫了一系列的WinCVS 2.x 的文章後, 有人問我, 什麼是CVS, 為什麼要用CVS, 諷刺的是, 回答這個問題的答案, 就是當初我寫這一系列文章的原因, 我以為介紹完WinCVS的使用方法, 就可以讓人知道版本控制器是怎麼一回事, 不過在寫了這麼多篇後,突然被問到這個問題, 讓我不得不停下來想一下是否應該先做個解釋了
CVS 主要為了幾個功能
1. 程式碼備份 :
程式設計者都知道原始程式碼得備份,雖然常常是硬碟壞掉才知道, 因為不像作家, 他們的作品發行後會有人幫他們保存, 而程式設計者只發行執行檔, 而CVS是一個Server , 可以讓你保存不同時期的程式碼, 所以程式碼備份對於CVS是一項重要的功能, 而且他通常是Client/Server 架構(因為它也可以在local作業,只是那會失去開發協同的功能,較少人使用), 意味著備份資料不在本機, 也算是一種異地備份吧
2. 程式碼版本控制:
在一直commit程式碼進CVS 時, 也就一直在做程式不同版本的備份, 因此,也擁有讀取出不同版本的功能, 這有點幾好處,
a. 查核舊版本的程式碼 :
過去就是是過去了, 為什麼要查, 大部份都是因為發行過的舊版程式出了某些問題, 需要查明問題的真正原因, 並確認問題是否有延續到其它版本或是正在開發的版本, 所以我們得取出那個版本的程式碼出來除錯
b. 比較不同版本的改變 :
這個功能我特別在Diff 時展現過他的威力, 他可以快速比較某兩個版本間的差別 ,我常用他來查核同事上傳的程式碼, 與自己改爛的程式碼, 或是為了確認某個Commit時說明寫的不夠清楚, 以至於我必需確定看到修改的程式碼
3. 產品協同開發 :
一個產品的開發, 可能同時由多人同步開發不同功能, 而程式碼會互相影響, 有時甚至同一個cpp 檔案, 會同時有兩個人動到, 所以確認多人開發最後會匯到同一份程式碼或是確定正在開發的是最新的程式碼的動作是協同開發最重要的工作, 而CVS正是為了處理這個問題而來, 也是所有協同程式版本控制器的最主要功能
以上這三點就是CVS這類版本控制器的重要特色, 如果你有這些需求(我還沒看過哪個程式設計者沒有的), 一定要來試試CVS .
不過有趣的是, 眾多這類程式, 為何唯獨CVS這麼多人用,這是一個很有趣的問題, CVS並不是最好用的程式, 這點可以由Linux的老大linus所使用的版本控制器不是CVS就可以看出端倪, 我試著做些解答
CVS 功能還算完整, 但真正的主流原因應該在於它是Open Source, 在SourceForge裡可以看出原因, 它一開始就採用CVS, 因為Open Source 界比一般公司更需要協同開發環境, 因為Open Soruce的專案, 通常多人開發, 而開發人員四散各地, 重點是, 他們是Open Source, 對於程式碼讀取權限的要求並不特別看重,而且因為他們是Open Source, 所以需要找一套也是Open Source的程式, 所以CVS 正是首選, 他免費也Open Source
不過CVS 隨時間增加, 還是漸漸露出疲態, 較鬆散的權限控制, unicode的支援不足(CVSNT有加強,但原始CVS還是沒有動), 對於Binary File的支援不足,所以SVN正是因此產生, 一群人重寫, 企圖取代CVS世界, 事實上由於多年的開發, SVN現在已相當穩定, 像是SourceForge都已經開始有SVN,我所有在注意的幾個Open Source 專案也開始有改到SVN的情況, 這是好現象, 只是在這樣的情況, 為什麼我還要介紹CVS呢!!
其實CVS還是個好東西, 簡單易懂, 而且現存很多專案與公司內部還都是CVS系統, 但是新加入的程式設計者還是需要學習一套版本控制, SVN因為較新,很多人開始觀注, 資料較多, 所以我還是留在CVS, 雖然我用SVN一陣子了, 但是對於CVS 的心得還是大於SVN, 我除了WinCVS 2.x系列外, 還會有其它使用CVS的工具會再持續介紹的
講了這麼多還是不了解CVS嗎? 如果如此, 留一下留言吧, 我在來看看要怎麼說明才能更完整
相關連結
WinCVS 2.x 的快速入門 安裝篇
WinCVS 2.x 的快速入門 設定篇
WinCVS 2.x 快速入門(二) Login for pserver (登錄)
WinCVS 2.x 快速入門(三) Checkout module (下載)
WinCVS 2.x 快速入門(四) Import module (載入程式)
WinCVS 2.x 快速入門 (五) Diff (程式差值查詢)
WinCVS 2.x 快速入門 (六) Commit (提交)
WinCVS 2.x 快速入門(七) Add (加入新檔)
WinCVS 2.x 快速入門(八) Remove, Erase(刪除檔案)
CVS
CVSNT
SVN
WINCVS
Thursday, August 02, 2007
WinCVS 2.x 快速入門(八) Remove, Erase(刪除檔案)
沒有用過WinCVS 的使用者一定會覺的奇怪, Erase 與Remove 不都是刪除的意思嗎, 其實是沒錯的, 只是為了區分兩種方式的刪除, 所以WinCVS用了講種說法
Remove (移除CVS Server 檔案):
這是標示CVS Server 這個檔案移除, 使用標示, 是因為CVS Server 並不會真的移除檔案, 因為凡走過必留痕跡, 其必須保留舊版本的資料以讓使用者可以查詢或退回, 所以Remove 即是標示這個檔案"將"被移除, 為什麼說"將"呢, 因為最終還是需要透過Commit來做最後完成動作
如圖我們可以看到一個打叉的Icon,此即是執行Remove後的樣子, 最後再透過Commit 就可以確定移除這個檔案
Erase (刪除本地檔案) :
Erase 是只移除本地檔案, 並不移除CVS Server 端, 這種方式我們常用來做兩種用途
1. 測式移除此檔案對整個專案的影響, 如果結果不理想, 隨時可以update 回來
2. 原檔案被污染, 所以移除後除新update CVS Server 的資料
我們由圖中可以發現, 是一個裂痕的Icon, 這是表示此檔已經不會磁碟上了, 但是CVS Server 上的資料還是在的, 你隨時可以透過在這個檔案上按右鍵, 執行Update 將檔案恢復
Monday, July 30, 2007
WinCVS 2.x 快速入門(七) Add (加入新檔)
上一篇WinCVS 2.x 快速入門 (六) Commit (提交) 主要是將已經在CVS Server 上的檔案進行更新, 也就是只是更新檔案的內容, 但如果要增加檔案的話, 就必需要透過 Add 的功能, 不過在介紹Add之前, 先來介紹一下Customize Menu 的方法
Customize Menu :
按下滑鼠右鍵, 可以看到很多 CVS 的功能, 但就是看不到Add, 怪怪的, 我也不懂為什麼不把Add 放在這, 不過WinCVS 的作者顯然是認為這種事見仁見智, 所以加入了客制化的右鍵選單,想放上什麼想不放什麼, 自己來吧
在點進去 Customize this menu.. 可以看到設定畫面, 左邊的視窗是未加入的功能, 右邊的視窗則是已經加入的功能, 可以透過Add,與Remove來做設定, 而一但點到右邊視窗, 又可以將功能移上移下的, 移到你喜歡的位置
我的習慣是將Add, Add Binary, Erase,Remove 這四個功能給加入, 以方便操作
在加入完成後, 按下滑鼠右鍵, 就可以看到紅框圈起來的地方是我們剛加入的功能, 並移到我們想要的地方了!
Add (加入新的檔案到CVS Server):
可以看到, 畫面中呈問號的icon, 這些檔案就是沒有在 CVS Server內的檔案, 我們要針對這些檔案做版本控制, 當然得要上傳到CVS Server, 之前我們 是使用 Import Module 來整個上傳, 圖中紅色的我們在即是已經上傳, 但修改過的檔案
所以將問號的檔案, 執行Add 後, 可以發現, Icon變為紅色A, 即是已經將這些檔案標示為需要加入CVS Server的檔案了, 不過還沒有結束, CVS 所有的動作, 都必須以Commite 結尾

不過這次我們直接將整個目錄Commit

再次強調, Commit 時, 一定要寫點LOG, 我們會再往後的文章裡, 發現這樣的好處
當Commite 完後, 得到 code 0 的回傳值後, 可以看到, 檔案Icon變成白色的了, 就代表, 我們已經與CVS 同步,其中可以看到第一次上傳的DlgInput.cpp的版本為1.1,而DbUti.cpp 已經由1.5 改為1.6 了

Monday, June 18, 2007
WinCVS 2.x 快速入門 (六) Commit (提交)
好處就是可以以圖型化的來顯示資訊, 圈1以紅色的圖示來表示程式已經被修改,而圈2則是表示此程式並沒有上傳到CVS Server,也就是此次新增的程式, 而圈3當然就是原汁原味沒有被修改過的程式碼, 圈4則可以看出程式碼的版本
我們以AddRecordDlg.cpp 為例, 要Commite這個檔案,在上面按滑鼠右鍵, 按下Comiit
在進入Commite Settings 視窗, 圈1的地方是填入此次修改的說明, 強烈建議一定寫點東西,我的經驗, 經常會出現查到這次改變的Code確不知道為了什麼而改變, 所以就很難判斷是當時Code寫錯,還是另有原因, 而圈2則是與未改時的程式碼做比較, 此部份我也強烈建議, 每次提交程式碼前,一定要確定再做一次Diff,以確定所提交的程式碼是對了, 而且沒有內含不當的除錯程式碼
按下確定, 就可以從Message windows 看到已經完成
完成後, 我們可以看到紅色的圖示已改為白色的, 而版本也由1.4改為1.5
Monday, June 11, 2007
WinCVS 2.x 快速入門 (五) Diff (程式差值查詢)
CVS 是個版本控制器, 存放了很都多不同版本的程式碼, 所以它的一個最大的好處, 就是可以比較各個版本的差異, 有時會改程式改到發現一個BUG, 卻不知道改到什麼, 而上一個版本還沒出現, 所以我們就可以透過Diff來看看, 我們這一次改了什麼東西, 有很多BUG,在這個階段就可以被找出來了..!!
接下來所有的示範的 Soruce Code我都以SmallAB 的Source Code來介紹, 一方面也比較真實, 一方面也因為沒有商業機密問題, 因為畢竟SmallAB我沒有打算收錢,而版權也是我自己的
我們先看一下WinCVS 的標準畫面, 在檔案這個一Window 可以看到檔案列表, 紅色(圈1)的即是程式有被修改到的檔案, 可以見到它的版本為1.2(圈2)
我們比較這個檔案到底改了什麼地方, 所以在此按滑鼠右鍵, 點選Diff , 進入Diff Settings

首先如果是第一次使用者, 必須先把 Use the external diff(圈1) 給勾起來, 因為我們想要以WinMerge來做為比較的工具, 內建的只有文字比較, 比較不直覺
在Diff Compare options (圈2)的地方, 有三種options 可以選
1. Local copy against the snae remote revision :
這種模式是改變後的程式碼與CVS Server 最新版本(如果有下tag,不一定是最新版本,但會是此tag的最新版本,)做比較
此種比較方式, 常用來比較這次修改的程式碼有哪些

2. Local copy against another revision/tag/branch or date :
這種模式是改變後的程式碼與指定版本的程式碼做比較 , 可以看到圈2已經打開, 這裡必需輸入你欲指定的版本編號
此種方式常用於比較較舊的版本與目前修改的程式做比較

3. Two revisions/tags/branches or dates anainst each other :
這種模式是兩個指定版本的程式碼做比較
這個常用於尋找某次版本改了什麼, 例如果想知道1.2改了什麼, 我們就會針對1.1與1.2做比較,但卻不是與目前修改的程式做比較, 這個Option其實與 option 2 一樣, 較少用, 因為graph的功能會比較直覺,我在介紹graph 時會詳細說明

當選定好比較的模式後, 點選確定就會直接呼叫WinMerge來比較
可以看到左邊有兩欄長條狀的, 只有最下面有顏色(圈1), 這就表示整篇程式碼, 只有這個地方有做改變, 用滑鼠直接點這裡, 就可以直接跑到這一段被改變的程式碼.
由右方的兩個程式碼視窗就可以看到改變什麼了(圈2), 這個GetRecordCount函式我加入了以條件設定的方式來讀取記錄數, 舊的程式只能讀取整個Table的記錄數
這就是CVS 好用的地方, 可以必較任何時候的Code, 以防只亂改, 並且可以幫助要上傳的Code再做一次簡查,看有沒有埋測試的Code在不應該留的地方相關連結
WinCVS 2.x 的快速入門 安裝篇
WinCVS 2.x 的快速入門 設定篇
WinCVS 2.x 快速入門(二) Login for pserver (登錄)
WinCVS 2.x 快速入門(三) Checkout module (下載)
WinCVS 2.x 快速入門(四) Import module (載入程式)
Sunday, June 10, 2007
WinCVS 2.x 快速入門 (四) Import Module (載入程式)
Import module :
點選Import Module 後會出現 Import filter 視窗
這是為了因應CVS 最為人詬病的問題所加入的, CVS Server 在記錄不同版本的程式, 是只存程式碼的差值, 這可能出自於儲存容量, 或是管理方便的考量, 不過當初這個聰明的點子,卻使的CVS Server 受到限制, 當初的程式碼皆以ASCII Code 儲存, 不過現在因應多國語言,Unicode 成形,但是CVS 確會判段錯誤, 這點我們會在介紹Commit功能時詳細說明
CVS Server 在上傳時有兩個屬性 TEXT 與Binary(CVSNT 多了Unicode,一般來說Linux 上的預設CVS Server 都沒有這個功能, 不過這部份屬於Server,不在本文討論), TEXT 則是以差值儲存,Binary則是完整儲存, 然而只要你選錯,CVS Server會照作而不幫你攔截 , 所以一些CVS Client, 如果們介紹的WinCVS 的Import Filter 功能就會先做防範,以免使用者使用錯誤
Repository path : 填入modules
Vendors tag 與 Release tag 我都沒在用, 所以就看著辦, 不過不填不能按確定的
CVSRoot: 選一下吧, 這之前設過了
按下確定後, 記得要看到
***** CVS exited normally with code 0 *****
才算數呦..!!
Friday, June 08, 2007
WinCVS 2.x 快速入門 (三) Checkout module (下載)
在登錄完成後, 接下來就是將CVS Server 的Code 下載下來了 , 所以我們點選"Checkout module"
Checkout module 的畫面..Step 1 : Module name and path on the server
輸入要Checkout 的模組名稱, 我們是要checkout 這台的WinCVS 這個模組, 所以我們就填入WinCVS, 記得CVS Server 很多都是在Linux平台上, 所以大小寫是有區分的, 所以必需確定
Step 2: Local folder to checkout to
這是設定你下載下來的程式要放在哪, 下載下來的程式會放在以module name 我名的子目錄裡, 所以我們只要輸入欲存放的根目錄就好
例如附圖所輸入的, cvsgui的Code 就會被放到 C:\CVSData\cvsgui 裡
Step 3 : CVSROOT
這就是填入repository, 這部份我們在上一篇就有填過了, 這裡就直接選就可以了
按下確定後, 就會看到訊息視窗在跑一堆東西了, 出現直到出現***** CVS exited normally with code 0 *****
就是完成了, 至於在跑的訊息是什麼意思, 我會在 Update 時再解釋, 我們先來看結果吧..!!
已經可以在CVSData 裡面看到 cvsgui 的目錄了
WinCVS 2.x 快速入門 (二) Login for pserver (登錄)
在安裝與設定後, 開始要使用WinCVS了, 基本上最常使用的是pserver , gserver , 與local 的CVS使用型態, 本文將介紹pserver 的 Login 方式
pserver :是一種與遠端CVS Server 連線的協定, 大部分的Open Source 的專案, 例如CVSGUI 的專案則為此協定,在SourceForge上使用CVS 的專案(目前SourceForge開始support SVN)都是採pserver 協定。
Login Step by Step :
Step 1 : Login
Step 2 : 點選欲登錄的Repository
第一次Login 必需先輸入 repository, 在 2.0 版以前每次Login 不同的repository, 就得重新打一次 但2.0 以後的版本, 會將過去輸入過的記錄起來, 只要點選就可以了, 不過這是第一次, 一切重頭開始
按下右下角 ... 的圖示, Repository 的設定Step 3: 設定Repository :
(a). 選Protocol, 在這裡當然選pserver
(b) . 填入 Repository path : 這是設定你所要登錄CVS Server 專案的主目錄
(c). 填入 Uesrname : 這..這..這大概不用解釋吧
(d). 填入 Hostname : 這是設定你要CVS Server 的網址
ㄟ...你怎麼沒說password 呢?, 我的建議是, password 不要在這填摟, 當你執行login 時, 到時後會提示你輸入, 因為如果輸入的話,你會直接在完整的Repository看到你的密碼
好吧, 一般情況, 填這樣就夠了, 按下OK 吧...!!
Step 4 :
等退回Login 的畫面, 就可以看到完整的Repository 了, 以後要去check out or update WinCVS的Code, 就可以直接選就好摟, 不用再輸入了!! 廢話不多說, 就開始吧...按下OK Login .
這時再輸入密碼吧!!
輸入完後就可以看到登錄成功了..!!
可以看到 CVS Exited normally with code 0 就是登錄完成了
code 0 是很重要的訊息, 以後如果WinCVS 動作有任何不對,請記得看清楚這地方的訊息, 一定是要0才能確定剛才的動作完成












