January 25, 2005

傳送至 Kindle
互動式隨選列印/另存成 PDF

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

這一篇是我給數位文化誌的文章,於 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 等版本管理系統,正是妳所需要的東西。

相關鏈結:

(+) 於 所發表 |
[創用 CC 授權條款]
旅行必備、居家良伴、送禮自用兩相宜的「版本控制系統」〉由 Jedi 製作,所有內容如無特別聲明,一律以創用 CC 姓名標示 3.0 台灣版授權條款釋出。
相關文章:
歷史上的今天:
迴響
[ 1 : 靜態鏈結 ]

*舉手* 我有疑問:

請問在不同的版本控制軟體之間可以交互使用嗎?比方說 Svn 的檔案庫可以被 Svk 引入嗎?

可以將檔案庫放在隨身碟,然後帶到不同台電腦去用嗎?因為如果要個人使用,實在找不到一台 Server 來放檔案庫,似乎可以做的事就是放在隨身碟,然後帶到不同台電腦去用……(這是不是很笨的用法啊?)

由 Yukie 發表於 January 26, 2005 10:21 AM
[ 2 : 靜態鏈結 ]

正好跟e天下裡李家同介紹的軟體差不多,
我則是用過cvs,文字介面的有些難用啦:P
等等看看有沒有免費圖形化介面XD

由 Markmcm 發表於 January 26, 2005 01:23 PM
[ 3 : 靜態鏈結 ]

To Yukie:

通常來說不同的版本控制系統是不能這樣混用的。但是如果你的規模彀大的話,倒不是不可能的事。請參考 autrijus 畫的這張 SVK 總覽

然後,對,把檔案庫擺到隨身碟很蠢,而且很不正確。妳應該拿一台「妳自己的」個人電腦來管理這些眾多不同的修訂版。俗話說得好,祇要有心,任何個人電腦都可以是伺服器。

to Markmcm:

版本控制系統是很重要的。然後,我明明就有在文章裏列出免費圖形化介面的 TortoiseSVNTortoiseCVS 啊!另外,單人單機使用的話, Perforce 也很好用。

Jedi 發表於 January 27, 2005 10:55 AM
[ 4 : 靜態鏈結 ]

剛剛沒講清楚, Perforce 原則上是賣錢的系統,而且很貴;不過單人單機使用的話有免費授權。

Jedi 發表於 January 27, 2005 10:56 AM
[ 5 : 靜態鏈結 ]

謝謝您的回答,看來要去游說我們的網管人員幫忙安裝一套 svn 提供大家使用。自己的電腦啊……嗯嗯,再想想……房間已經夠小、夠熱了……

由 Yukie 發表於 February 1, 2005 12:17 AM
[ 6 : 靜態鏈結 ]

To Yukie:

可以把他拿來當做私人的版本控制。:p

我之前使用 svn 的時候也是開機的時候才跑 svn ,然後把自己的一些程式和作業放進去,也挺好用的。

墳墓 發表於 February 5, 2005 10:26 AM
[ 7 : 靜態鏈結 ]

我自己因為使用的是 WinXP,
所以利用 svnserve 來當 server。
不過總是讓我覺得很毛,這麼一來,資料不是很可能被有心人看光光嗎?
所以,似乎還是得重新編譯 Apache,利用 httpd 才是正途?
或是說 WinXP 底下也可以利用 svn+ssh:// 的方式來架設檔案庫呢?

由 Yukie 發表於 February 16, 2005 11:20 PM
[ 8 : 靜態鏈結 ]

mod_dav_svn.so 安裝

From FAQ:
I am trying to use mod_dav_svn with Apache on Win32 and I'm getting an error saying that the module cannot be found, yet the mod_dav_svn.so file is right there in \Apache\modules.

Answer:
The error message in this case is a little misleading. Most likely Apache is unable to load one or more DLLs that mod_dav_svn.so relies on. If Apache is running as a service it will not have the same PATH as a regular user. Make sure that libdb4*.dll, libeay32.dll and ssleay32.dll are present in either \Apache\bin or \Apache\modules. You can copy them from your Subversion installation directory if they are not there.
If this still does not resolve the problem, you should use a tool like Dependency Walker on mod_dav_svn.so to see if there are any other unresolved dependencies.
Bob

按照 FAQ 的方式將檔案 copy 到 Apache 目錄下,還是找不到 mod_dav_svn.so。
後來用 Dependency Walker 發現 mod_dav_svn.so 需要 mod_dav.so 與 libhttpd.dll 這兩個檔案,
上了 mod_dav 的網頁,下載下來的祇有 mod_dav.dll,不是 mod_dav_svn.so 要的 .so,
另外 libhttpd.dll 都找不到。

放棄使用 Apache on Win32 當檔案庫。:(

由 Yukie 發表於 February 17, 2005 01:40 AM
[ 9 : 靜態鏈結 ]

請見蔡兄撰寫之 Subversion for Windows 安裝指南

Jedi 發表於 February 17, 2005 11:30 AM
[ 10 : 靜態鏈結 ]

解決了!!:)

看了底下的文章:
http://tortoisesvn.tigris.org/docs/TortoiseSVN_en/ch03.html

才知道原來必需用 Apache 2.xx 的版本,
而我之前安裝的是 Apache 1.xx,
難怪都跑不起來!!

版本控制軟體確實方便,
再也不必擔心手上的檔案新舊不一的問題了!:D

由 Yukie 發表於 February 18, 2005 01:24 AM
[ 11 : 靜態鏈結 ]

請問:

小弟我之前裝了TortoiseSVN來使用,並建了一個database,重灌後,再裝TortoiseSVN,可是這個database好像便無法開起來用了,這問題可以解決嗎? 謝謝


弟的系統是Windows XP sp2

小明 發表於 April 7, 2005 11:50 AM
[ 12 : 靜態鏈結 ]

請問:
小弟已經順利安裝SVN及TSVN,但是發現有個小問題就是Log中並未紀錄作者,我是採用Doman User認證的方式,請問是否我哪裡需要做進一步的設定?

由 Merlin 發表於 December 30, 2005 05:40 PM
給我迴響吧!
個人資訊








是否記住個人資訊?



請依上圖輸入檢核碼:
迴響





Jedi.org: 部落格 | Weblog | 三太子 | 討論 | MTBook | 網頁親和力 | 深入親和力 | 簡報原力:AV | 履歷 | + | @ | Flickr | Lytro | tumblr | NSFW