在我開始要寫 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) 協作版本系統
No comments:
Post a Comment