版本控制軟件:Subversion 快捷簡單入門

前言
為甚麼要寫呢?因為除了 Subversion Book中譯本以外,很少找到關於 的中文資訊。雖然歐禮萊的紅豆書寫得不錯,但是給想快速上手的人,我覺得內容有點太長了。既然沒事好幹,那就動動手敲敲鍵盤吧。

問題
本段主要給沒接觸過版本控制系統的人看。大家嘗試過合作編程沒有?例如 group project (小組專案),或者一隊人一起維護網站系統?你們是不是也會有以下的情況:當 A 在改一個檔案的時候,B 決不能動手,要不然 B 上載到 FTP 後可能會把 A 的剛新蓋掉,那時候 A 便欲哭無淚了。有些較先進的系統可以讓管理員鎖住檔案,只讓一個人同時可以寫入檔案。

基本上解決以上那種「痛苦」的後果,但是如果那個檔案同時有兩個問題,要分別由 A 和 B 同時作出改動,那麼較後取得修改權的 B 也就只有自嘆倒楣,因為他之前寫在舊檔案的改動便要人手逐項逐項搬到由 A 上載的新檔案去。便是有檔案合併軟件如 WinMerge 的幫助,「下載,人手比對再上載」這連串動作也挺麻煩的,莫論三個人甚至十數人對同一個檔案作出改動了。

版本控制系統:你的專案歷史資料館
版本控制系統圖解
圖片解說,從紅豆書處連過來的。
所以有人發明了版本控制系統。版本控制最大的特色是:系統會知道同名字的檔案哪個較新,哪個較舊。例如,A 今天改動了檔案一下並存到系統裏。B 事前並不知道 A 改過了東西,第二天嘗試把從舊版改過來的檔案存到系統裏去。但是,版本管理系統當然知道 B 的檔案是從舊版改過來的,當然沒有 A 的改動啦。所以,系統會告訴 B,請他先更新一下自己的檔案,好讓 B 下次的更新不會把 A 的更新蓋掉(當然,就算蓋掉也只是最新的版本,A 的更新還是會被儲到系統的。這點以後再說)

當 B 下載了 A 的改動後,在 B 電腦上的版本管理程式會自動把更新弄到 B 手上的檔案(即合併),那麼 B 手上的檔案就同時有 A 的改動和 B 的改動。現在,只要 B 再上載一次,只要系統內沒有更新的版本,整個程序便算大功告成。

Subversion 操作方法
回正題。Subversion 的指令真的真的很簡單,不過如果你不喜歡使用指令行,那麼還有不少免費的 GUI,包括:

  1. 與 Windows Explorer 結合的 TortoiseSVN (首選!)
  2. 與 Eclipse 結合的 Subclipse
  3. 跨平台 Subversion 圖像介面 RapidSVN

當然 Subversion 本身的命令行程式也是跨平台的,而且安裝方便,Windows 上絕不用編譯(安裝程式執行檔),Linux 也只是平常安裝的步驟而已。

安裝以後,有幾個指令一定要知道的:

  1. checkout (svn co) – 即在 Repository (倉庫,即儲存專案所有版本以及其他資訊的地方) 取出最新版本的檔案(Subversion 裏頭叫 HEAD),複製一份下載到本機。到本機的檔案以後便叫 working copy(工作複本)。
  2. update (svn update) – 把本機的工作複本更新至倉庫上的最新版本,而自己在工作複本上作的改動不會遺失。
  3. revert (svn revert) – 即把自己在工作複本上作的改動抺除,把檔案還原至最後一次更新時倉庫上的版本。
  4. diff (svn diff) – 檢查變更,通常是檢查手頭上工作複本和於倉庫中最新版本的不同。
  5. log (svn log) – 檢查以往的變更,及各參與者於變更時寫下的紀錄。
  6. commit/checkin (svn ci) – 將變更提交到倉庫去。
  7. status (svn status) – 檢視下一次提交的變更列表。
  8. blame/annotate (svn blame) – 檢查檔案裏每一行最後更新的版本,以及作者(例如第一行是第五版由 A 更新的,而第二行則是由 B 於第二版更新的)

簡單嗎?其實 Subversion 的功能強大,不可能那麼快學完。但是,基本功能很容易學會,而且連接方法簡單,難怪會取代老一套的系統 CVS。

One thought on “版本控制軟件:Subversion 快捷簡單入門

Leave a Reply

Your email address will not be published. Required fields are marked *