Clearcase vs. Subversion

由於 CC 是公司的 standard,在用的 Subversion 自然也不會很長命。同事找了我一起開 mirgration plan meeting,跟 CC admin 們一起研究如何以 Clearecase 達到 Subversion 的效果。首先要克服的是整個 UCM Model,其實問題是我們不夠人手 QA,如果以 UCM 那種 update View -> QA -> deliever 一定會拖慢開發進度,之前那幾次叫救命人手 merge code 便是如此 (所以才轉用 Subversion)。有趣的是,admin 們居然叫我們維持現在的混合模式,即 Clearcase + Subversion!這我也是意想不到,哈。最後 admin 們說會試試起 team view… 且看怎樣。

另一方面是廣州同事在 Clearcase 上的效能問題:check-in 4 個檔案要五分鐘。真慢呢。我想 CC protocol 寫得不好是最大的原因吧,雖然 subversion 也慢,但也未至於那個程度。admin 建議我們可以試試直接用 UNIX cmd mount drive,希望情況會有所改善吧。

Moving to Subversion (別告訢 auditor 們啊)

太好了,經我一番「鼓吹」,non-ETL 的同事們全線用了 Subversion 作 code sharing 啦!以往跟各位同事提過大學時的某個 mini-project 用 Subversion 作 Version Control 的時候,他們已驚嘆了一番。但是當時(公司工作時) 程式碼沒那麼多,人手合併起來沒太大問題。SCM 是有的 (Rational Clearcase),不過做 merging 的工作也較麻煩 (Lock-based)。到後來由於功能不斷增多,人手合併往往會產生許多意想不到的問題 (例如手拿三份 source 比對),實在要命。

最近 B 君說想把程式碼移到 CVS(正確來說是再建立多一個 repository),但是有點技術困難尚待解決(例如 RSA(Eclipse)不會認出 web project)。當然我即時跟他重提在飯局後便被遺忘的 SVN,又跟他說,「Apache,KDE 也轉用 Subversion 來作 versioning control 喇!」。之後他居然給我找來了比較各 SCM 的網頁,連說 cool 呢。

跟同事簡介了一下,再在伺服器起了 repository,把手頭上的源碼匯進去,repository 的版本編號變成 1 了!後來給他們安裝 Subclipse,再把 project check-out,整個步驟也容易得很。可是例如 .classpath 大家也不一樣(有些 machine-dependant 的 JAR path,每個人安裝路徑也不相同),不斷設定便太不方便了。後來想了想,便是把這類 classpath 全放進一個 user library 裏,那麼大家便可以自己設定所需的路徑,又不會影響 repository 上的 .classpath,算是解決了問題。

用了 Subversion,再不用連夜作人手比對啦!(可是千萬不要告訴 IT Audit 我們幹的好事!:P)

延伸閱讀:
以往介紹 Subversion 的文章

Comp. Group Project 必備之物: Subversion

當 你又在問:「你的 xxy.php 改完了沒有?我要加兩句 code 進去啊!」或者驚呼:「甚麼?你剛才 upload 了 kkk.c?那麼我用了三小時寫的 function 呢?給化為烏有了?Oh my…!」的時候,有沒有想過這種情況可以避免呢?要是用傳統的 FTP,我看大家要規限著自己能修改甚麼檔案,非常的沒有彈性。那麼對檔案進行鎖定呢?要是有組員在修改完檔案後忘記釋放修改權,那大家還是不用做了。況 且,以上兩個方法也沒保障萬一開發組員對 server 版本錯手做成的錯誤:那就是,改動是永遠的了,沒辦法回頭,除非每人在更改一次前也進行備份吧…

針 對以上種種的問題,SCM(Software Configuration Managment,源程式碼管理) 軟件便應運而生。SCM 是怎麼運作的?首先軟件會要求使用者在用戶端儲存整份專案(Project)的最新版本,當用戶對本端進行改動後而要儲放,便會向伺服器要求作出存放。伺 服器比對本身存放source code 和客戶端的分別,再進行合併。此外每一次存放紀錄也會自動記進資料庫,很方便吧?就連目錄結構的變更,檔名變更,刪除,也會一一給紀錄在案,所以現在多數 大型專案開發也一定要用到 SCM。

SCM 軟件?老大哥可算是 CVS(Concurrent Versioning System),現在是大部份開源軟件所應用的一套 SCM。它開源,而且免費,還支援 SSH 等。此外不可不介紹的是 MS 內附在 Visual Studio 的 Sourcesafe。我想不少軟件開法企業也會用上它吧,因為SS 跟整套 VS 的整合性很高,用 VS 的 IDE 一同開發便更得心應手。只不過,CVS 設定難,使用更難;SS 很貴,不是大公司個人是買不下的。所以小弟今次想介紹的是 SVN(Subversion),一套多平台,設定簡單得很的 SCM 軟件。當然它還是免費,開源才吸引了小弟。

SVN 的使用方法簡單得很,先鍵入” svn co [地址] “(checkout)拿一份最新的 source code working copy 到本機去,好讓能慢慢修改。當修改完成後,只要打上 “svn ci” (commit) ,軟件便會把你本機修改過的版本和伺服器的 working copy 比對,然後合併。很方便吧?不過要是你修改的地方和別人修改的地方相同,做成衝突,該怎麼辦?當然,SVN會讓你人手選擇變動的地方,讓兩位開發者(或以 上)作出妥協,再上傳一個新的 working copy。此外,不小心做錯了,可以鍵入”svn revert” 來還原,鍵入”svn status” 可查看用戶端的版本和伺服器端的版本有甚麼分別,”svn diff” 還可查看究竟多了哪一句,少了哪一句呢。 或許CLI 對你來說是太複雜了,那麼 Subversion 還有很多漂亮的 GUI 版本。例如和 Explorer 整合的 TortoiseSVN,跨平台的 RapidSVN,VS.NET 的 addin ankhSVN,Eclipse 的 plugin subclipse 等等。Apple 更先行一步,Xcode 已內置支援 Subversion 。

伺服器的設定也簡單得很。只要你安裝了 Apache,SVN 便可以和它整合,Apache 的用戶管理也可套用在 SVN 系統上。不想安裝 Apache?不要緊,SVN 另有獨立伺服器版本,是功能少了點罷。詳細我不在這裏說了,留待大家裝一套才去發現發現吧。