21 三月, 2009 10:39
IT Manager 職場求生術 (1) -- 版本控管(Version Control)
由 Michael 發表於 [ Management Skill ](1120) 閱讀, (0) 引用, (1) 回應 ,
推文( 0 )
版本控管(Version Control)是團隊作戰(Team Work)的首要工具, 因為, 系統再怎麼切分, 都沒辦法讓團隊成員各自獨立作業, 互不干擾, 例如, 共用的Library, 就可能你改一下, 我也加一個function, 如果, 沒有適當控管工具, 就會造成互相覆蓋他人的程式, 那可是大災難啊!
版本控管的範圍不只是程式而已, 文件、資料庫或其他參考資料都可以列入控管, 唯一的差別是只有程式碼完全是文字(Text)檔, 可以利用版本控管工具的版本差異比較功能(Version Difference)列舉出兩版本的差異處, 因此, 筆者習慣將專案的所有產出物(Artifact)分目錄全部列管, 把它當成專案的知識庫使用.
版本控管的機制與圖書館運作差不多, 要修改既有程式時就先Check Out, 有如圖書館的借書, 將程式取出, 改完後就Check In(如圖書館的還書動作), 放回版本控管資料庫中, 唯一與圖書不同的是, 版本控管允許一書多借, 多人可同時Check Out或取得最新版本(Get Latest Version), 至於是否要允許多人同時Check Out, 並修改程式, 就產生兩種控管機制:
- Lock-Modify-Unlock: 即一次只允許一個人修改同一支程式, check out後立即上鎖, 第二個人要check out 同一支程式時, 系統就會發出錯誤訊息, 禁止check out, 直到第一個人check in 並解鎖.
- Copy-Modify-Merge: 第二派的人認為多人同時修改同一支程式的機率不高, 故允許多人同時Check Out, 不上鎖, 但Check In 時會檢查Check out時的版本是否與目前最新的版本相同, 如果不同, 表示有人已經修改過程式, 系統會要求作版本合併(Merge)的動作.
另外, 還有版本分支(Branch)、共用程式(Share)的作法, 由於篇幅有限, 就不在此討論, 可參考VSS或Subversion的相關文件.
市面上的版本控管工具五花八門, 筆者只針對使用過的兩項工具加以說明, 分別是Microsoft Visual SourceSafe(VSS)及Subversion, 我使用VSS已經十多年, 它的功能相當簡單, 而且與Visual Studio.net IDE 緊密整合, 可從IDE中Check In/Check Out,它基本上是採Lock-Modify-Unlock方式, 預設Check out時自動上鎖, 但也支援多人同時Check Out, 但它有下列問題, 筆者現試圖改採Subversion:
- 2GB容量的限制: 當一個VSS資料庫超過2GB時, 會造成無法check in, 但又不會出現錯誤訊息, 這點要非常小心, 不知道新版錯誤是否更正?
- 無法遠端Check in/Out: 有時專案要至客戶駐點(On Site), 修改程式, 無法直接Check out/in, 常造成在客戶處忘記帶去最新版本的程式, 或改完後忘記check in修改後的程式. 下一次修改就又以舊程式覆蓋了.
- 微軟在新版的VS.NET已經改採另一套版本控管工具了. VSS一值維持在6.0版.
- VSS是有價的, 每換一個工作, 就要老闆埋單, 也是oRZ...
而Subversion是一套Open Source, 它是採Copy-Modify-Merge, Check out時不會自動上鎖, 因為它認為版本衝突時再merge就好了, 它的特點如下:
- 直接在檔案總管上check in/out: 在目錄或檔案上按滑鼠右鍵, 出現Subversion選單, 直接選擇 check in/out
- 指令眾多: 有20多個指令, 含delete/revert/lock等, 可做所有的控管動作
- 支援遠端連線, 包括HTTPS
- 版本check in有類似審核的功能: Create Patch/Apply Patch, 提供確認修改的權限控管
但是我在使用上還是認為有幾個疑慮:
- Lock-Modify-Unlock還是一個比較保險的機制, 不管merge多方便, 當你在修改時, 若忘記check out, 你可能是從很舊的版本開始改起, 那merge的困難度就很高了.
- Subversion check in/out的速度還是比VSS慢很多, 可能它是採HTTP, 而非File Copy
- 用了十多年的VSS, 要改用Subversion總是舊情難忘.
最後再苦口婆心一下, 對的制度一定要堅持, 絕不能妥協, 才能基業長青, 安享天年.