在自由軟體社群所用的的開發工具中,有非常多種不同的版本控制系統。自由軟體鑄造場目前提供了其中兩套最被廣為應用的系統:Subversion 與 CVS。以下我們將以較新且功能較完整的 Subversion 為例,介紹版本控制系統的一些基本觀念,並探討這樣的系統如何幫助我們解決問題。
Subversion 是一個自由/開放源碼的版本控制系統,管理著隨時間而改變的檔案。檔案放置在一個中央檔案庫 (repository) 中。這個檔案庫很像一個尋常的檔案伺服器,不過它會記住每一次檔案的變動。這樣你就可以把檔案回覆到舊的版本,或是瀏覽檔案的變動歷程。許多人會把版本控制系統想像成某種"時光機器"。每個使用者在自己的電腦擁有一或多份工作複本(working copy),在本地編輯檔案後,再透過用戶端程式(client)將檔案送回檔案庫,或要求用戶端程式從檔案庫取出其他人所寫入的資料。
這樣做有什麼特別之處? 到目前為止,這些聽起來就像一個典型的檔案伺服器。事實上,檔案庫就是一種檔案伺服器,但是與你所見的不太相同。讓 Subversion 檔案庫如此不同的原因,在於它會記住所有的更動:每個檔案的每一個更動,甚至是每一個目錄所作的更動,像是目錄與檔案的新增,刪除,以及重新編排。
當一個用戶端自檔案庫讀取資料時,它通常只會看到最新版本的檔案樹。但是用戶端也可以看到早先的檔案。舉例來說,用戶端可以查詢過往的狀態,像是 "上個星期三,這個目錄裡有什麼東西?",或 "誰是最後一個更動這個檔案的人,而且作了哪些更動?" 這就是任何版本控制系統的核心問題:記錄並追蹤隨著時間對資料所作的更動。