Visual SourceSafe 入門教學
作者:蔡煥麟
日期:Sep-4-2003
摘要
本文介紹了版本管理的基本概念,以及 Visual SourceSafe 的基礎功能,目的在於希望提供一個能夠快速上手的入門指南,讓初學者能儘快將它用在專案管理上,同時也具備學習其他進階議題的基礎。
1. 簡介
在軟體工程的領域裡,有一塊叫做 SCM(Software Configuration Management),有人管它叫「軟體建構管理」。SCM 的傳統定義是原始碼的版本管理,後來則逐漸演進擴大,還包含了軟體開發的一些標準和程序的制定與應用 [Summerville 2000]。版本管理工具對目前的軟體開發開環境來說相當重要,因為不管是軟硬體環境的改變、需求改變、軟體本身的 bug...等等,都會令軟體不斷地演進,我們必須記錄各個版本,以便隨時比對版本之間的差異,或者回到(rollback to)過去的某個版本;此外,當專案小組成員眾多時,工作交接、多人修改同一個檔案等情況,都有可能造成檔案的版本混亂。例如一支程式本來由張三撰寫,可是因為某些原因(請假、臨時支援其他專案、請別人 debug....)暫時由李四修改,後來又交回給張三。如果用傳統的檔案共享機制,每次有這種情形就要互相通知:我改好囉,請把檔案從檔案伺服器搬回你家,萬一有人忘了,可能就會造成檔案版本錯亂,而東西交到客戶手上才發現 bug 依然存在。
因此,如果你曾碰過下列情形,而且深感困擾,你可能就需要版本管理工具的協助:
- 檔案不見了(用滑鼠拖放檔案時誤動作,不知道拖去哪兒放了);
- 檔案被別人覆蓋;
- 想要比對各版本之間有何差異;
- 想要回到之前修改的版本(客戶反覆無常,設計改來改去....);
- 多人同時修改造成的版本混亂;
- 想要知道誰動過的我的程式碼;
- 跨專案共享元件或模組散落在各處。
目前市場上的版本管理工具已經有很多,環肥燕瘦任君挑選,以下幾個可能是大家比較熟悉的:
- Rational Clear Case
- Borland StarTeam
- Merant PVCS Version Manager
- Microsoft Visual SourceSafe(VSS)
- Concurrent Versions System(CVS)
CVS 雖然免費,也有視窗介面,但是入門門檻還是偏高,不易入手,以 unix/linux 社群用得較多;StarTeam 和 ClearCase 功能較強大,價格當然也較貴;PVCS 個人也沒使用過,無法提供意見;而 Visual SourceSafe(VSS)功能雖然比較陽春,但是筆者試用之後,覺得如果只需要管理多人開發時的文件和原始碼版本,其實還挺好用的,也很容易上手。VSS 在 Visual Studio .NET 光碟中就有附了,價格算是相當實惠。以下是使用 VSS 管理原始碼的好處(有些不是 VSS 特有的):
- 建構人員可以實施每週的里程碑版本建立,統一編譯所有程式碼,確保交給客戶的版本一定是最新的,不會因為某個開發人員忘了把自家 local 的檔案複製到 server 的共享目錄而遺漏掉。
- leader 不用一天到晚打電話或發 mail 去追誰還沒有把新的檔案放上 file server。
- 共用單元的更新更簡便、確實。
- 提供獨立且細微的 user 權限控管,沒有 Windows 檔案分享時的帳戶權限檢查困擾。
- 同一個檔案多人同時修改可自動 merge 最後的修改成果。
- 可將歷史版本叫出來比對,顯示差異處,以進行合併或修正。
- 提供 Web 應用程式的檔案佈署功能。
- 可以和多種開發工具整合,例如:Visual Basic、Visual Studio .NET、FrontPage 200x。
註:撰寫此文件時,使用的是 VSS 版本是 Visual Studio .NET 1.0 附的 Visual SourceSafe 6.0c。
1.1 基本概念
想像一下沒有工具協助的情況下,當多人同時修改一份文件時,要如何確保文件的版本一致?
也許你可以指派一位專人負責管理文件的進出,這個人姑且就叫他 Manager 好了,Manager 待在一間小小的辦公室裡,負責文件庫的維護和文件的進出。當小組成員 Eric 要修改文件時,就拿磁片到這個窗口請 Manager 複製一份給他,Manager 在複製的同時會記下來:這份文件正由 Eric 修改;而 Eric 則會把磁片拿到他自己的機器上,把檔案複製到他的工作目錄(working folder),然後進行修改。等到 Eric 修改完畢,再從工作目錄中把檔案複製到磁片上交給 Manager,最後文件就被更新到文件庫中(這動作叫做 check in),至此整個文件的修改與更新的程序就完成了。如果在 Eric 修改期間,Vivid 也拿著磁片向 Manager 要求修改同一份文件,這時 Manager 會告訴 Vivid:這份文件目前已經由 Eric 領出(check out),且還在修改當中,你得等他改完才行喔。
以目前的作業環境來看,使用磁片來傳遞檔案似乎是原始人的行徑,我們當然可以透過網路來傳遞檔案,但是透過網路傳遞檔案卻無法提供上面的例子所要表達的重點:檔案的鎖定。而鎖定機制就是 VSS(或其他版本管理工具)提供的基本功能之一,它確保了多人修改文件時,版本的一致性。上面這個例子當中的文件庫,就相當於 VSS 的資料庫,而 VSS 的用戶端工具(稱為 VSS Explorer)則扮演了 Manager 的角色。
當然 VSS 提供的功能更多,它也允許多人同時取出(check out)同一個檔案進行修改,並且在將檔案送回(check in)資料庫時,自動進行合併(merge),這屬於比較進階的功能,稍後亦會提到。
現在你應該已經大概知道什麼是 VSS 資料庫、什麼是 check in、check out,以及文件修改的流程了,接下來就把一些常見的 VSS 術語列出來,在閱讀本文時,如果碰到不了解的術語,也可以隨時回頭查看。
以下是使用 VSS 時常見的術語:
術語 | 說明 |
VSS 資料庫 | VSS 會使用一個資料庫來儲存各專案的程式碼版本(包括歷史版本和最新版本的檔案)。 |
Project | VSS 專案,是一個專案檔案的邏輯結構,跟作業系統的目錄類似(注意不是指特殊開發工具的專案,例如:VB 專案)。 |
Work |