2007年12月4日 星期二

版本管理

身為程式設計師談起"版本管理"這名詞應該不陌生,甚至是日常該做的工作吧;版本管理的方法、工具有很多種,沒有絕對最好與最差,只要能適合自己/團隊就是最好的方法及工具了。
剛入行時根本就不懂得如何做好版本管理,公司及前輩也沒有什麼工具統一管理,Source就任由工程師儲存在PC的硬碟中,至於版本該怎麼管理就看個人了,當時最廣被公司同事使用就是切不同資料夾去擺放不同時期修改的 Source,這種方式最省事只要自己看得懂就OK,但是日子久了很難分得清礎哪個資料夾是目前版本,尤其是要把Source交接出去時更是難以決擇,以我來講就常被同事擺道,拿到再三保證宣稱是目前版本Source修改後更新到客戶端即被發現某些功能不見或是異常出現,後來才發現所拿到版本是舊版,自己也只能摸摸鼻子挨罵了。
當自己維護的Source越來越多時,我開始把資料夾命名方式和編譯執行檔時的版本號碼一致(如執行檔版本號碼為 1.0.0.0,資料夾名稱即為 1.0.0.0)這樣子至少可依資料夾名稱大小來分辨版本新舊,這種做法也很省事,只要在編譯執行檔時更改一下版本號碼以及複製資料夾時將名稱命名為版本號碼即可,對於個人是再簡單不過的版本管理方式了,不過唯一缺點是Source交給別人改時又不依自己方式累加版本號碼時就慘了,常常Source接回時又得重新編譯一次。
之後換到另一工作環境後開始試著使用 Visual SourceSafe(VS.NET2005中的一個模組) 來管理自己的Source,頓時才發現原來有個工具來管理是多麼美好的事情呀,只要改好Source更新到Server端,不需每次要改Source時還得問一下別人有沒有人改過,因為就算要更新的檔案已被其它人先更新到Server端時,VSS也會出現訊息,而且也可從VSS看出是誰在何時更新了哪些檔案...,這麼方便的事情居然是離開"軟體公司"後才開始接觸到。
如果前陣子各位有到 Mobile01 網站應該都看過上方有個連結ICON,就是要你去檢舉公司內有無使用盜版軟體呀,也因為這樣公司資訊室開始清算沒版權的軟體準備提報採購,所以才想到除了 VSS 外還有很多廣被稱讚且免費的版本管理軟體,於是就上網找找資料,找到了cvc(Concurrent Versions System)及svn(Subversion)這二套來比較,二套中最大不同應是版本號碼編列模式,cvs是以檔案來編但svn是以整個專案庫來編,後來我選擇了svn 來管理我的Source Code。
apache + svn + TortoiseSVN 的組合讓你的Source Code有好的管理,現在和同事修改Source Code前不需再彼此問該Source Code有沒有正在修改,修改後 Commit 回 svn 時就會幫你檢查哪些檔案有衝突(你修改的原版本已被別人先Commit,讓你決定修改內容解決衝突後再Commit),因為 svn 的 checkout(取出) 只是把最新版本複製一份到開發PC端並不會Lock(鎖定),這點在VSS(Visual SourceSafes)就得特別去設定成可多人CheckOut才能達到"真"多人協同作業,現在我要修改Source Code的流程就變成:更新(取得最新版本)->修改Source Code->送交(Commit,將修改部分回寫svn),再也不用去擔心拿到的版本是否為最終版。
同為程式設計師的你又用哪種工具幫你管理Source Code、開發文件呢?如果你還是那種常掉版本的程式設計師,那你真要花點時間找個最合適你的方法、工具來管管你的版本了。

PS:
另外TortoiseSVN中建議可在檔案庫切成三個目錄:trunk、branches、tags;
trunk(樹幹):就是主支,用來擺放最新版本的Source(使用者使用的版本)。
branches(分支):用來擺放正Debug、開發新功能的版本,修改完後再合併回trunk中,不過這目錄我是沒用到呀。
tags(標記):用來擺放舊版本Source,我目前是依執行檔編譯時如果版本號碼有異動就會版本切一份到tags中。

沒有留言: