登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。

1.版本控制系統想要解決的問題

每個人的電腦裡,都有成千上萬個檔案。
不論是心得筆記,工作成果還是照片音樂,最常見的保存方式就是檔案。
在關機與開機之間想要保留先前的內容,第一個想到的也是存成檔案。
然而,"如何處理檔案" 這個問題常比我們直覺所想的複雜許多。
以下我們將從 "一個人/一台電腦/一個檔案" 開始逐步介紹到 "多個人/多台電腦/多台檔案",
在這些情境下對檔案處理有哪些需求,傳統的方法在試圖滿足這些需求時又留下了哪些問題,
並在後面的章節中提出版本控制系統對這些需求與問題的解法。

 一個人 一台電腦 一個檔案

當我們編輯檔案時,最常見的操作就是:
修改 -> 存檔 -> 修改 -> 存檔 -> 修改 ...。
每當我們存檔時,原始檔案的內容就被新的內容蓋過了。有時我們會遇到這樣的狀況:"啊! 上週被刪掉那段的內容才是正確的! 要怎麼救回來?" 如果是幾小時內的修改,或許還有機會在編輯器關掉前用 "復原/Undo" 的方式找回來。對於更久之前的修改通常是無法這樣救回的。
為了避免將來無法找到現在的版本,最常見的解決方式就是:另存新檔。每當編輯告一個段落,覺得現在的內容值得保存,或者是要作不確定是否正確的修改時,便透過"另存新檔"的方式留下備份。

舉例來說,如果正在編輯的檔案是 "work.txt" 的話,我們可能會:
save work.txt to work_old.txt
save work.txt to work2.txt
save work.txt to work_02.txt
save work.txt to work_20070628.txt
save work.txt to work_20070628_04_44.txt
save work.txt to work_20070628_04_44_some_short_description.txt
這樣的作法相當自然。不過也有些問題:
  • 檔案多,可能為了備份一個檔案而生出數十個檔案
  • 如果想要能夠照編輯的先後順序排列以便搜尋,可能的作法有
  •  依賴檔案的儲存時間。問題:時間資訊可能會在複製檔案時不小心遺失。
  •  在檔名加上序號。問題:雖然保留了先後順序,但仍可能失去重要的時間資訊。
  • 在檔名加上日期時間。問題:可以穩當的用檔名中的時間排序及幫助搜尋,但仍缺少為何修改為何存檔的資訊。
  • 在檔名加上日期時間和描述。問題:檔名的空間不適合放太詳細的描述,時間久了對喚起記憶的幫助有限。
  •  如果想要從 work.txt 改名成 report.txt,得一次改數十個檔案
  •  因為操作複雜,降低了常常另存新檔的意願,往往導致想要的版本沒被存到。

以上是單一檔案的狀況,接著來看多檔案時的狀況。

 一個人 一台電腦 多個檔案

當工作項目有相當的複雜度時,我們常需要多個檔案來儲存工作。這些檔案之間有時會彼此關連,舉例來說:
  • 文件的總目錄/索引/參考資料與各章節
  • 網頁的 HTML 與其 CSS 樣式表
  • 文件的文字描述與附圖的內容
  • 程式中函數的呼叫者/被呼叫者,標頭檔/常數/設定檔與程式本文

當檔案彼此間有關連時,我們需要拿出彼此匹配的版本以避免不一致的狀況發生。然而隨著時間過去,要從一堆檔案的一大串過往版本間找到彼此匹配的版本並不容易。面對這種需求,常見的方法就是:每當跨檔案的修改告一段落,便把整個目錄複製一份或存成壓縮檔。
這種方式也帶來了一些問題:

  • 常常連沒有改動的檔案也一併包進去了,浪費空間。
  • 除非另外安裝工具,否則很難從兩份目錄樹中知道修改了哪些檔案的哪些地方。
  • 前面單一檔案時會遇到的所有問題,這邊也都會遇到。

 一個人 多台電腦 多個檔案

隨著電腦的普及化,一個人使用多台電腦的機會也越來越多。在學校與工作的地方有電腦,家裡也有電腦,隨身還帶著筆記型電腦。如果想在一台電腦上接續另外一台電腦上的工作,要如何取得最新的檔案呢?
可能的作法有:

  • 檔案只有唯一一份在其中一台機器上,其他台只是透過網路存取同一份檔案。這種作法的優點是在於只有一份檔案,所以每一台看到的都是最新的修改結果。但缺點是這台電腦必須一直在線上,而其他台電腦也要在有網路連線的地方才能存取資料,載入速度也受到網路的限制。
  • 檔案在每一台都有一份,更新後將檔案複製到其他台電腦,或是下次到別台電腦時再去最後更新的電腦上將檔案複製過來。這種作法因為檔案在本地端有一份,載入儲存較快,也可以在離線時繼續更新本地的檔案,待上線時再互傳檔案。缺點是有時擁有最新更動的電腦離線而無法取得更動,或者是誤以為手上的舊版是新版而修改出重複或分岔的版本,甚至會發生不小心用舊版蓋掉新版的慘狀。
  • 檔案只有唯一一份在隨身碟上。優點是內容一直保持最新,也不受網路的影響。缺點則是隨身碟往往空間有限,大容量的隨身碟則易損壞或較為昂貴。遺失的機會雖然不大,但是忘在家裡以致無法工作的情形也是偶爾會發生。

多個人 多台電腦 多個檔案

當一份工作需要多人完成時,常會編修同一組檔案。要如何讓每個人取得正確的版本?不止一個人同時修改同一個檔案時又要如何協調?
可能的作法有:
  • 每個人互相 copy / email 檔案。這種作法除了和前面所說的一樣不小心把舊版本的當成新的或新的當成舊的之外,還得時時彼此詢問是否有更動,或將更動傳給原本沒有必要知道的人,花去了許多額外的溝通成本。
  • 放在一個共用的伺服器。這種作法得時時注意伺服器上的變更,並小心地從伺服器上複製檔案下來,以免蓋過了本地的更動。上傳時更要注意是否蓋過了別人的修改。

由於在多人協同合作的情境下,會一再地面臨到上述的種種問題。因此,許多體會到這些問題的程式設計師便開發了程式來抒解這種困境,這些解決問題的程式,就是我們所要介紹的 "版本控制系統"。






分類: Subversion