前言
為甚麼要寫呢?因為除了 Subversion Book 的中譯本以外,很少找到關於 Subversion 的中文資訊。雖然歐禮萊的紅豆書寫得不錯,但是給想快速上手的人,我覺得內容有點太長了。既然沒事好幹,那就動動手敲敲鍵盤吧。
Continue reading
Tag Archives: subversion
Subversion for SourceForge
在千呼萬喚之下,SourceForge.net 這個開源網站終於提供 CVS 以外的 SCM:Subversion!對不少開源開發者而言,這是天大的喜訊。因為 SVN 指令及連線方法比 CVS 簡得得許多許多,而且對 binary 檔案有較佳支援。
話說回來,公司的同事好像又對 ClearCase 產生了點抗拒…
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 另有獨立伺服器版本,是功能少了點罷。詳細我不在這裏說了,留待大家裝一套才去發現發現吧。