[敲打鍵盤] 旅行必備、居家良伴、送禮自用兩相宜的「版本控制系統」

這一篇是我給數位文化誌的文章,於 2004/12/24 刊登在 http://mag.udn.com/mag/dc/storypage.jsp?f_MAIN_ID=1&f_SUB_ID=425&f_ART_ID=6028 。請注意,這一篇文章並不授權各位讀者任意作為商業使用。

旅行必備、居家良伴、送禮自用兩相宜的「版本控制系統」

版本控制系統不祇可以幫助妳追蹤修訂手上的工作進度,讓妳在千鈞一髮之際還能拾回過往辛苦的結晶,甚至能夠讓妳跟其他人協同工作、合作無間。

一般人聽到「版本控制系統 (Version Control System, VCS) 」或者「修訂版控制系統 (Revision Control System, RCS) 」,總會覺得那是寫程式的怪物們纔會去用的東西、祇有程式碼纔會被放在那樣的環境裡開發。然而隨著資訊量持續增加,每個人在日常生活中必須要掌握、處理的的資訊也越來越繁雜,不管是為了做專題、報告、寫論文乃至於翻譯等,祇要是長時間持續產出的工作,也都逐漸需要有版本管理系統的協助,纔能夠事半功倍了。

回溯至 1995 年,當微軟 Windows 95 上市的時候,比爾‧蓋茲曾經如此解釋這種桌面圖形化介面的設計理念:「(使用者所編撰、閱讀、交換、使用的)文件纔是作業系統的核心」。這裡的「文件」其實泛指著各式各樣的檔案內容,當時比爾認為使用者並不真的在乎要用哪一套程式來編輯檔案,但是如何管理這些檔案(包括檔案本身及其內容)卻會是非常重要的。就算是自己一個人的工作,也鮮少有一口氣完成的,多半都得耗上許多日子,逐步增添、編修、刪減手上的文件內容,纔會得到最終的結果。然而在這個過程中,卻有可能發生許許多多的意外:像是不慎刪除了重要的資訊(而沒有備份)、不小心拿舊版本蓋掉新版本、檔案毀損而再也無法復原,或者更複雜一點,妳可能難以找到數個在特定期間一併被更動的檔案。

當妳必須跟別人協同工作時,狀況又會變得更複雜。妳們有可能同時編修了一份檔案,而需要把雙方的變更再「合併」起來,成為最後的版本;或者妳們可能需要知道對方正在處理哪些檔案、每一次變動的實際內容等;甚至,也有可能發生檔案被對方弄壞/弄丟了,而妳得把他們弄回來纔行的狀況。這些工作上的需求,也就是在掌握工作各部分的進度,並且掌握每一個修訂版、乃至於修訂版間的差異、每次修訂的摘要等。而版本控制系統一開始就是設計來滿足這些需求的。

在版本管理系統的概念裏,會有一個稱做「檔案庫 (Repository) 」的區域,就像圖書館一樣,收納了許許多多的檔案。當妳需要修改檔案的時候,就要先去圖書館櫃臺登記取出,修改完後再放回圖書館。勤奮的圖書館館員會記錄妳取出跟送回的時間、同一批送回的檔案,甚至為每一次的變更加上註解。這個圖書館並不單單祇是管理檔案出入流通而已,它還會保存每一次檔案送回去的樣子,也能夠幫妳比對任兩個不同版本間的差異。當然,如果妳不慎毀損了取出的檔案,祇需要向圖書館再登記一下就又可以取回舊有的副本了,絲毫沒有風險。如果有兩個人同時對同一個檔案做了變更怎麼辦呢?這時圖書館也可以在所謂的「合併 (merge) 程式」協助下,解決這樣的「版本衝突」,產生合併雙方的修改內容。事實上隨著「合併程式」的發展,現在甚至能夠做到「三方合併」!

曾經有一個朋友,習慣性地把公司的行政規章細則放進版本管理系統裏,並且每個月更新一次;結果她發現了公司會偷偷地修改某些細則,像是員工福利、請假規定等,一點一滴地蠶食鯨吞屬於員工的權益。如果沒有版本管理系統,她就沒辦法輕易比對出公司行政規章的歷代演變了。事實上這種版本演變的「過程」其實也是重要的資訊, IBM 公司有一個計畫叫 Collaborative User Experience Projects ,就利用版本管理系統這方面的優勢,製作了文件的沿革 (history flow) ,分析同一份文件在不同時間點時各元素所佔的比重,以及不同貢獻者對文件所造成的影響。藉由這樣的處理,我們不但能夠從文件本身獲益,更能從「文件的演變過程」裏獲益。

Walter F. Tichy 在 1982 年的時候撰寫了著名的 RCS ,讓每個使用者都能夠簡單地把自己的文件、檔案納入修訂版版管理系統;目前幾乎所有廠商所製作的 un*x 作業系統裏,也都預設提供了這支程式。而為了滿足多人共同工作的需求, 1992 年時 Brian Berliner 和 Jeff Polk 完成了 CVS ,目前仍是多數軟體專案的首選版本管理系統。又過了 10 年,到了 2002 年的時候,為了解決 CVS 效能緩慢而又易損壞的缺點, CVS 的開發團隊在 Karl Fogel 的領導下,推出了 Subversion (svn) ; 2004 年 clkao 又寫出了 SVK ,讓使用者毋須仰賴網路連線,也能做到版本管理以及協同工作。

RCS ⸺ CVS ⸺ SVN ⸺ SVK 可謂一脈道統,在各種作業系統上(對,連妳的 Windows 上也是)都能裝起來執行,而且免費!發展到了 SVK 後更可謂兼容並蓄,不僅適合參與多人工作,也適合拿來自己一個人用;當妳要負責協商多人工作時,更是應該拿出來讓大家一起用。俗話說「工欲善其事,必先利其器」,做任何事成功的秘訣,就在於隨時掌握工作中各個部分的進度與變革,並且隨時做好回溯舊有版本的準備(因為許多美妙靈巧的想法,往往一個不小心就被掩埋了)。而 SVK 等版本管理系統,正是妳所需要的東西。

相關鏈結:

jedi.org: