Visual SourceSafe 入門教學
上一篇 / 下一篇 2008-09-08 10:49:35 / 个人分类:7879
摘要
*vROli0fo^ R%C7xk%i:be0本文介紹了版本管理的基本概念,以及 Visual SourceSafe 的基礎功能,目的在於希望提供一個能夠快速上手的入門指南,讓初學者能儘快將它用在專案管理上,同時也具備學習其他進階議題的基礎。
{6MZTw ]~&I(]051Testing软件测试网(u']Ry*C]0p;yRe%N.W
1. 簡介
!`Larxy[0在軟體工程的領域裡,有一塊叫做 SCM(Software Configuration Management),有人管它叫「軟體建構管理」。SCM 的傳統定義是原始碼的版本管理,後來則逐漸演進擴大,還包含了軟體開發的一些標準和程序的制定與應用 [Summerville 2000]。版本管理工具對目前的軟體開發開環境來說相當重要,因為不管是軟硬體環境的改變、需求改變、軟體本身的 bug...等等,都會令軟體不斷地演進,我們必須記錄各個版本,以便隨時比對版本之間的差異,或者回到(rollback to)過去的某個版本;此外,當專案小組成員眾多時,工作交接、多人修改同一個檔案等情況,都有可能造成檔案的版本混亂。例如一支程式本來由張三撰寫,可是因為某些原因(請假、臨時支援其他專案、請別人 debug....)暫時由李四修改,後來又交回給張三。如果用傳統的檔案共享機制,每次有這種情形就要互相通知:我改好囉,請把檔案從檔案伺服器搬回你家,萬一有人忘了,可能就會造成檔案版本錯亂,而東西交到客戶手上才發現 bug 依然存在。
#~+^%?VO_0t_1`*sa9lP$n+GY1\!z0因此,如果你曾碰過下列情形,而且深感困擾,你可能就需要版本管理工具的協助:51Testing软件测试网7[8@%xs2ER:eZ
- 檔案不見了(用滑鼠拖放檔案時誤動作,不知道拖去哪兒放了);
- 檔案被別人覆蓋;
- 想要比對各版本之間有何差異;
- 想要回到之前修改的版本(客戶反覆無常,設計改來改去....);
- 多人同時修改造成的版本混亂;
- 想要知道誰動過的我的程式碼;
- 跨專案共享元件或模組散落在各處。
目前市場上的版本管理工具已經有很多,環肥燕瘦任君挑選,以下幾個可能是大家比較熟悉的:51Testing软件测试网 shm^7g
- RationalClear 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 特有的):
2p @9y$]4of*y4Y)n0- 建構人員可以實施每週的里程碑版本建立,統一編譯所有程式碼,確保交給客戶的版本一定是最新的,不會因為某個開發人員忘了把自家 local 的檔案複製到 server 的共享目錄而遺漏掉。
- leader 不用一天到晚打電話或發 mail 去追誰還沒有把新的檔案放上 file server。
- 共用單元的更新更簡便、確實。
- 提供獨立且細微的 user 權限控管,沒有Windows檔案分享時的帳戶權限檢查困擾。
- 同一個檔案多人同時修改可自動 merge 最後的修改成果。
- 可將歷史版本叫出來比對,顯示差異處,以進行合併或修正。
- 提供 Web 應用程式的檔案佈署功能。
- 可以和多種開發工具整合,例如:Visual Basic、Visual Studio .NET、FrontPage 200x。
WKNw5o5M Z.Dc0註:撰寫此文件時,使用的是 VSS 版本是 Visual Studio .NET 1.0 附的 Visual SourceSafe 6.0c。
klW1n_+s01.1 基本概念
J'V"a3?dP4rh.K0想像一下沒有工具協助的情況下,當多人同時修改一份文件時,要如何確保文件的版本一致?
*~*f5^ S mq9U;`8m7^0;}.KN'[a,tdmI0也許你可以指派一位專人負責管理文件的進出,這個人姑且就叫他 Manager 好了,Manager 待在一間小小的辦公室裡,負責文件庫的維護和文件的進出。當小組成員 Eric 要修改文件時,就拿磁片到這個窗口請 Manager 複製一份給他,Manager 在複製的同時會記下來:這份文件正由 Eric 修改;而 Eric 則會把磁片拿到他自己的機器上,把檔案複製到他的工作目錄(working folder),然後進行修改。等到 Eric 修改完畢,再從工作目錄中把檔案複製到磁片上交給 Manager,最後文件就被更新到文件庫中(這動作叫做 check in),至此整個文件的修改與更新的程序就完成了。如果在 Eric 修改期間,Vivid 也拿著磁片向 Manager 要求修改同一份文件,這時 Manager 會告訴 Vivid:這份文件目前已經由 Eric 領出(check out),且還在修改當中,你得等他改完才行喔。51Testing软件测试网j}t Q3y4g-i9?
51Testing软件测试网1XA A0?TQ以目前的作業環境來看,使用磁片來傳遞檔案似乎是原始人的行徑,我們當然可以透過網路來傳遞檔案,但是透過網路傳遞檔案卻無法提供上面的例子所要表達的重點:檔案的鎖定。而鎖定機制就是 VSS(或其他版本管理工具)提供的基本功能之一,它確保了多人修改文件時,版本的一致性。上面這個例子當中的文件庫,就相當於 VSS 的資料庫,而 VSS 的用戶端工具(稱為 VSS Explorer)則扮演了 Manager 的角色。
(He:q/m$q8cj9u0:s#eXo2Uzp}h:@;u0當然 VSS 提供的功能更多,它也允許多人同時取出(check out)同一個檔案進行修改,並且在將檔案送回(check in)資料庫時,自動進行合併(merge),這屬於比較進階的功能,稍後亦會提到。
&o Ia5e0pp(l`0HV%N?^:l"P k"E0現在你應該已經大概知道什麼是 VSS 資料庫、什麼是 check in、check out,以及文件修改的流程了,接下來就把一些常見的 VSS 術語列出來,在閱讀本文時,如果碰到不了解的術語,也可以隨時回頭查看。
~-P8o^c;ME051Testing软件测试网4bk P7Kz以下是使用 VSS 時常見的術語:
JNq#U b0術語 | 說明 |
VSS 資料庫 | VSS 會使用一個資料庫來儲存各專案的程式碼版本(包括歷史版本和最新版本的檔案)。 |
Project | VSS 專案,是一個專案檔案的邏輯結構,跟作業系統的目錄類似(注意不是指特殊開發工具的專案,例如:VB 專案)。 |
Working Folder | 用戶端的專案工作目錄。每次從 VSS 資料庫取出檔案時,就會將檔案複製用戶端機器的這個目錄下。 |
Master Copy | 儲存在 VSS 資料庫中的最新版的檔案。 |
Local Copy | 儲存在本機的 Working Folder 的版本。 |
Check Out | 把要修改的檔案從 Master Copy 複製一份到本機的 Working Folder 下,以便修改。 |
Check In | 本機的檔案修改完後,把檔案送回 VSS 資料庫。 |
Get | 只從 VSS 資料庫取得 Master Copy 的檔案,但是不做修改。當你要取得檔案的最新版,並且只對它讀取時,可使用此功能。 |
Multiple Checkouts | 一個檔案同時被多人取出修改。 |
Merge | 合併 Multiple Checkouts 的修改結果。 |
Shadow Folder | 影子目錄,它是一個硬碟上的實體目錄,每當開發人員 check in 檔案時,VSS 就會同時將檔案複製一份到這個影子目錄裡面。 |
2. 安裝與使用範例
51Testing软件测试网+L;B7F6o!L1\本節分別介紹 server 端與 client 的安裝及使用。
pg*yN2I*@5FiI02.1 伺服器端
51Testing软件测试网.TYU-j6l6?#O,hQO伺服器端包含了管理工具和用戶端工具的安裝,相關的管理及設定工作有下列幾項:51Testing软件测试网(Q+i0S Dy&k9}3K
- 安裝 VSS。
- 建立資料庫(使用 Admin 管理工具)。
- 建立 user 帳戶(使用 Admin 管理工具)。
- 設定其他選項。
- 設定網路的共用目錄。
??-c0}'^6`!u0以下是各項工作的施行細節,我們會在 D:\VSS_DB 目錄下建立一個新的 VSS 資料庫,如果你不想要建立資料庫,也可以使用預設的資料庫。
:Vj(Wv@5Dh:X*h02.1.1 安裝 VSS
51Testing软件测试网Q6u8Vi&PQ1p9d yJ直接執行安裝程式,安裝過程中會有一個安裝選項畫面,其中有三個選項,分別為 SHARED DATABASE SERVER、CUSTOM、與 STAND-ALONE。請選擇 SHARED DATABASE SERVER。
,?S)X|N051Testing软件测试网Wx&EKE"E-d&WM安裝完成後,在〔開始\程式集〕裡面會有一個 Microsoft Visual SourceSafe 資料夾,裡面有四個程式捷徑:
'CC)P(}%~1A^$lZ0- Analyse & Fix VSS DB
- Analyse VSS DB
- Microsoft Visual SourceSafe 6.0
- Visual SourceSafe 6.0 Admin
2.1.2 建立資料庫
51Testing软件测试网Z OSqld]Z `開啟 Visual SourceSafe 6.0 Admin,如果是第一次執行,程式會提示你要設定 Admin 帳號的密碼,若此時不設定,以後也可以在〔Users\Change Password〕裡面變更 Admin 帳號的密碼。
*m*hR'Jw)` C051Testing软件测试网-X e-b&r,]@f.?進入 VSS Admin 之後,先點選〔Tools\Create Database〕建立一個自己的資料庫,建立資料庫時會同時建立一個預設的管理員帳戶 'Admin',此帳戶無法刪除。
8r@7p y9tf[1o/xZ&p&G051Testing软件测试网K)|2GI6D一個資料庫裡面可以包含多個專案,當然你可以視需要建立多個資料庫,只是一次只能使用一個資料庫。51Testing软件测试网Z Jn#m{
51Testing软件测试网]3Xih#G1tp8C6OVB假設你將資料庫建立在 D:\VSS_DB 目錄。51Testing软件测试网Vw]3Z)I9TSK]z
2.1.3 建立使用者帳戶
資料庫建立好之後,必須先開啟資料庫,然後就可以為這個資料庫建立 user 帳號,以便日後為各個 user 賦予適當的檔案存取權限。這些 user 就是開發小組的成員。51Testing软件测试网h bXz"z(@Y欲開啟資料庫,請點選〔 Users\Open SourceSafe Database〕或者按 Ctrl+O,然後選擇上一個步驟建立的資料庫,如下圖:51Testing软件测试网5{8mnlAO8K0v
PO\y5q,^051Testing软件测试网6Q_3]mbe` aP
nm'{C+y2s0如果之前建立的資料庫沒有顯示在清單裡面,請按右邊的 Browse 鈕找到該目錄(此動作只需一次),然後按 Open 鈕,即可開啟資料庫。51Testing软件测试网9y&]u5eC[+G+Kb.O
V/u eh*[9_eb0資料庫開啟後,點選〔Users\Add User〕或按 Ctrl+A 即可新增一名使用者。
eWw J;~O02.1.4 設定其他選項
在 VSS Admin 中點選〔Tools\Options〕即可開啟選項設定視窗,其中有些設定在用戶端(VSS Explorer)裡面也有,而這裡的設定是全域的,也就是如果用戶端沒有修改自己的設定,就會取用這裡的設定。51Testing软件测试网 mC!G!WjI-VY建議的設定值(True/False 表示勾選/不勾選):
.B ~M\#gj;K0
頁夾 項目名稱 設定值 General Use network name for automatic user log in True Project Rights Enable Rights and Assignments commands True
2.1.5 設定共享目錄
|r4bnr9y T0你至少要把 server 端的兩個目錄分享出來給其他網路使用者存取:
&H#jLw0ePUW0- 分享 VSS 的應用程式目錄,以便用戶端可以在網路上直接執行其中的 NetSetup.exe 進行安裝。
- 分享資料庫所在的目錄,如前面範例中的 D:\VSS_DB。
n0ui:uq(_0注意:51Testing软件测试网bL k$VN
w(cR&pUH:XS0如果你在分享 VSS 的應用程式目錄時,把目錄權限設為「唯讀」的話,用戶端安裝完後將無法自動執行 VSS(但仍可手動執行);若目錄權限為「完全控制」則不會有這個現象。
V/B+F G%P0
2.2 用戶端
2.2.1 安裝用戶端
51Testing软件测试网8do(AIF%Je7kk9U k安裝用戶端程式的方法有兩種:51Testing软件测试网%o0W1HyL9no
- 向管理員詢問伺服器端的 VSS 應用程式分享目錄,然後直接執行該目錄下的 NetSetup.exe`.
- 利用光碟安裝,安裝型態選擇 "Custom",然後選擇 "Client Programs"。
2.2.2 開啟資料庫
51Testing软件测试网&o5_tv&Dq-W安裝完成後,執行 VSS Explorer(在「程式集」中的名稱是 "Microsoft Visual SourceSafe 6.0"),第一次執行時會出現登入視窗,輸入要登入的資料庫名稱(瀏覽網路上的芳鄰,找到 2.1.5 節所分享出來的資料庫目錄),然後輸入使用者名稱和密碼,即可登入資料庫。參考下圖:
W(@.{\`J!\g8kO:O051Testing软件测试网:OGE-YD"G^Z`gh*y t"J051Testing软件测试网3\k4_6Tv!M
VSS Admin 提供一個選項,可以在登入時自動以目前登入 Widnows 的使用者名稱來登入資料庫,前提是 VSS 的使用者名稱要和 Windows 的使者名稱相同。方法是將 VSS Admin 的〔Tools\Options〕的 "General" 頁夾中的 "Use network name for automatic user login" 項目打勾。以後再次執行 VSS Explorer 時,就會自動以該使用者名稱登入,而不會出現登入畫面。
'xa%FvhiJ? C O02.2.3 建立專案
51Testing软件测试网D9Bf ~Pt/h登入資料庫之後,由於是第一次執行,所以沒有建立任何專案,看到的畫面會像下面這張圖:
2Ui/_#\T2h X051Testing软件测试网9X[!Z5l3v[N51Testing软件测试网YJ6av}4v$v51Testing软件测试网`Q.uP|/c$e
左邊是以樹狀顯示的專案面板,"$/" 是 VSS 的 root project,所有的專案都是建立在此節點之下;右邊會顯示目前的專案的檔案清單;下方狀態列中則顯示提示訊息、目前登入的使用者名稱、檔案的排序方式、以及檔案數量。
^{7\4E8^[00`b7AC`.yrn/K)x0以下步驟示範如何建立一個專案,該專案的檔案目錄已經事先建立好,位置是 "D:\Projects\Demo1\",而且該目錄下已經存在所有文件和程式碼檔案。51Testing软件测试网h$}H$B|
- 在專案面板中的 $/ 節點上面點一下右鍵,然後點選〔Create Project...〕。在接下來開啟的視窗中輸入專案名稱 "Demo1",再按 Ok 鈕即可建立專案。
- 接著將檔案加入此專案節點。做法是在專案面板中的 "Demo1" 節點點一下,然後點選〔File\Add Files...〕或按 Ctrl+A。
- 接著將專案 Demo1 目錄下,要加入版本管理的子目錄加進來,例如:若要加入 Src 目錄,則照下圖方式操作:51Testing软件测试网4wi[#Y3J O x${
l4M{7U-YuxD`(N17672951Testing软件测试网3dm/r?{H4T-ur
_;u6I*`}n(l*O#?17672951Testing软件测试网*Dc&aG` rx
B)Ju4p kO0
"O RJO:Q8Z'i [!OgW0k07P2~rSV/O.vU176729注意必須雙擊欲加入的資料夾,使其圖示變成開啟的樣子,才是加入該資料夾。確定之後按 "Add" 鈕即可加入,加入資料夾的視窗左下角的 "Recursive" 項目通常會打勾,也就是該資料夾底下的子目錄也要一併加入。51Testing软件测试网R(U `H2N6t0t$l51Testing软件测试网2[;yX(N k:[
51Testing软件测试网G5H3p4@iTr!rh
Tz^c;mD0Tip: 你也可以用滑鼠拖曳的方式加入檔案或資料夾。51Testing软件测试网.dQ6\]_51Testing软件测试网3Diy/OW,G5r3l
Tip: 當你在加入檔案時,如果臨時要取消,可以按畫面方狀態列最左邊的〔Cancel〕鈕。事實上,只要是比較花時間的工作,都會出現〔Cancel〕鈕讓你有機會取消工作。51Testing软件测试网&vY['Fd$~ OQh51Testing软件测试网B-a `0`X+]9Y - 資料夾加入之後,程式會詢問你是否要將此資料夾設定為工作目錄(working folder),回答 "Yes" 即可。參考下列畫面:
nd @$r ?3t6E0G0A{5Hc%U+M!\17672951Testing软件测试网-?c)u!ORE
v:^2M;t~5XaIp5}U,h17672951Testing软件测试网&q qpFX3u4X[q!R7V51Testing软件测试网9GSl;u5j)h
51Testing软件测试网1[s'N.]`9X'H5z4f
G|m'O O6x176729此對話盒關閉後即會回加入資料夾的視窗,若不需要加入其他目錄,就按 "Close" 鈕關閉此視窗。 - 此時畫面應會顯示如下圖:
7Xh_gY3H1a0e(XLpu17672951Testing软件测试网my nEY&j*`u
vH4N pk5N0k17672951Testing软件测试网.Q Op/|}+S
!qF#E4` l(ZP176729
%r r:`8j }I0X'D,{V+|8U%s:C^t176729注意專案面板中的節點必須設定成工作目錄(working folder)才能夠對該目錄執行 check in/check out 動作,例如此範例中的 Demo1 節點,它是我們自行建立的邏輯專案,並未設定其工作目錄(也就是沒有對應到實體的目錄),因此當你點選 Demo1 節點時,右邊面板上方的狀態會顯示 "No Working Folder"。51Testing软件测试网"dpU/cD0Bz n51Testing软件测试网5Db^*T Jq*pr\`
&Tn V(||+t{cb07B5tr.VN*a176729如果你需要將 Demo1 目錄底下的所有目錄都納入 VSS 管理,也可以省略步驟 1,而在步驟 2 加入檔案時,直接開啟 "D:\Projects\Demo1" 資料夾,這樣就會連同 Demo1 這個目錄一併加入,且同時為它設定工作目錄。
.F1g5c!kj `T V_06^@khT0W176729
2.2.4 設定工作目錄
\7ZWK"j!~]7[@0建立專案之後,接著就是要設定工作目錄。首先,在 VSS Explorer 的專案面板裡面找到你的專案,在該項目上點一下滑鼠右鍵,再點選〔Set Working Folder...〕,把目錄指向你的本機硬碟的專案目錄即可。只要父層的節點有設定工作目錄,其下的子節點就不用再指定工作目錄了。
'M"a Ec!K.gn0+J*S g0p u-f'J0設定好工作目錄之後,就可以利用 VSS 執行 Check Out 或 Get 動作。如果你希望把整個專案的目錄和檔案都先從從伺服器取回來,並且複製到你的工作目錄下,你可以使用 Get;方法是在專案名稱上點一下滑鼠右鍵,再點選〔Get Latest Version...〕,此時會開啟一個對話視窗,如下圖所示:
`Vk/P ^9\0G.Y|051Testing软件测试网&pm_B2d51Testing软件测试网R` ^[?qBYD5M
I?P"[7U;R@7w0注意左下角的 "Recursive" 項目,通常我們會希望連子目錄一併取回,所以要將此項目打勾。確定之後按〔OK〕鈕即可,遇到不存在的目錄,VSS 會問你要不要建立,選 "Yes All" 即可,完成之後,你可以開啟檔案總管,看一下工作目錄中的檔目錄結構,如果執行的步驟正確,你需要的專案檔案和目錄 VSS 應該都已經幫你從伺服器複製過來了。此動作並非必要,你可以等到你要讀取或修改某個檔案時,再去 Get 或 Check Out 該檔案,到時候 VSS 一樣會幫你建立必要的目錄。51Testing软件测试网(j+Db Tx!Ji!q Rf
cvC}\ ykY0如果你希望每次取得(get)或 check out 檔案時,"Recursive" 項目都要自動勾選,你可以在〔Tools\Options〕的 "General" 頁夾更改這個預設設定,參考下圖:51Testing软件测试网a/MSYm6^jsB
$DN bhDH` n1`0
,g&pQ B im7j3\0
mz8e8d@"P(E0專案完成時,或者需要對現有版本進行建置與發行時,可以在伺服器的電腦上開啟 VSS Explorer,利用〔Get Lastest Version〕取得最新版本,你便可以在伺服器端進行建置或者備份專案的工作;或者,你也可以透過影子目錄(shadow folder)的功能,來達到相同的目的(參考 3.4 節)。51Testing软件测试网I"?0guL"Y:j|:`
3. 其他功能
51Testing软件测试网)e/a&l'X`k,K ^cY本節將介紹 VSS 的其他功能,包括:
ZP-s[.C'fdy.FV ?0- 多重 checkouts
- 檔案的共享(Share)與分枝(Branch)
- 影子目錄(Shadow Folder)
3.1 多重 checkouts
51Testing软件测试网YYhI.A/Eg}5@ sVSS 預設不允許多重 checkouts,也就是當一個檔案或目錄被一個使用者 check out 之後,其他使用者就不能再 check out 該檔案目錄。當你的小組可能為多人同時修改一個檔案,或多人同時修改一個目錄裡面的各個檔案時,可以將多重 checkouts 的功能開啟。設定方法是在 VSS Admin 管理工具裡面,將 〔Tools\Options〕的 "General" 頁夾裡的 "Allow multiple checkouts" 項目打勾。51Testing软件测试网A3`3{(q|%U
Y#U`L r%`7N0使用多重 checkouts 時,有些值得特別注意的地方,例如:一個檔案由多人同修改時,VSS 將如何處理?以下將說明相關的注意事項。
+x8vuCBIsW0文字檔 v.s. 進位檔
51Testing软件测试网1pV"[{v"h4AI SL當你開啟多重 checkouts 選項時,表示有可能一個檔案同時由多人修改,而 VSS 能夠將這些人對同一個檔案的修改結果合併(merge)起來,每當一個使用者 check in 檔案時,VSS 就會自動進行 merge。也由於 VSS 提供了這項功能,因此限定只有文字檔(text files)才能夠多重 checkouts,二進位檔案(binary files)仍然是禁止的。VSS 會自動判斷檔案是屬於文字檔還是二進位檔(藉由搜尋二進位的 \0x0 字元),你也可以預先指定好哪些檔案類型是二進位檔,省得 VSS 還要花時間判斷;方法是:開啟 VSS Admin 的〔Tools\Options〕,切到 "File Types" 頁夾,把二進位檔案的附檔名加入 "Binary files" 欄位裡。參考下圖:51Testing软件测试网;xPl~Z[;m
51Testing软件测试网5T$v&_G2n6A51Testing软件测试网? | Xsa CZu
yPK6z.t;m.Y0註:所謂的文字檔,通常是指可以用記事本開啟的純文字檔案,因此 WORD 文件(.DOC)檔案應該歸類為二進位檔案。51Testing软件测试网tc;Z0D(h`6w_
[a6{8|'O9B k0圖中的 File groups 清單裡面,筆者自行加入了 Delphi 專案會用到的檔案類型,這項設定是用在當你加入檔案時,顯示在檔案類型下拉盒中,方便你挑選檔案而已,如下圖:51Testing软件测试网(pGP&HS$t
51Testing软件测试网y-Yzg8_SG.rP&`p4v7{s8sPa+JUx0
,Qqen%[5s"k0其實大部分的情況下,用預設的 "*.*" 就行了。51Testing软件测试网6l6k^+y`f
合併機制
51Testing软件测试网2l!j,w9E^8Wxk當一個檔案被多人 check out 時,每當有人將該檔案 check in,VSS 就會自動比對檔案的差異,並且合併有差異的部分。考慮下面的場景:51Testing软件测试网%ie} j!og5~
- 張三與李四都 check out 了 foo.txt 這個檔案。
- 張三修改了 foo.txt 的第 100 行,並且 check in。
- 李四修改了 foo.txt 的第 200 行,並且在 210 行的地方加入了 5 行程式碼。
- 李四改完了,並且 check in。
V1H5|9L7VP;KbOf0上面的例子對 VSS 來說毫無困難,它會安靜地自動合併張三和李四所做的修改。但不是所有情況都這麼完美,萬一兩個人都修改了同一行程式碼,此時 VSS 就無法替你做決定,必須由你自己決定怎樣合併檔案。考慮下面的場景:
n4{e-? lV051Testing软件测试网Mp^J@D這時候 VSS 無法判定到底要怎麼合併,於是開啟視窗顯示兩個版本的差異,讓後面 check in 的人(Michael)決定怎麼合併,參考下圖:51Testing软件测试网0R w zQ-iO9C
51Testing软件测试网l4b'r bRj@utqe#@-DdZ$R_GH"c0
? Y0E} f2hF0圖中分為三個面板,左上角的面板是目前伺服器上的版本(上一個人 check out 的版本),右上角是本地端的版本,下方面板則是合併後的版本;此時 Michael 就可以從兩個版本中觀察差異的部分,決定好怎麼修改後,在左邊或右邊面板中點滑鼠右鍵,選擇〔Apply Change〕來把要改變的內容套用到下方面板。你也可以修改下方面板的文字內容,改好後按工具列的儲存鈕(磁片的圖示)即可。51Testing软件测试网7O,Sl9^1RM
51Testing软件测试网2[H$l%CYX;~3e附帶一提,你可以從 VSS Explorer 顯示的畫面看出一個檔案是否被多人取出修改。如下圖的 test.txt,在檔案名稱的左邊有兩個勾勾的圖示,而 User 欄則顯示最後一次 check out 的使用者名稱,後面加上 "..."。
3~&l*FtOVWaM01TJ'K8h1{S5i:T0
#C2hpM(qRL/o0
值得採用嗎?
YC(vcI7JD0萬一 VSS 無法自動合併,手動合併似乎有點麻煩,這樣做值得嗎?還是乾脆不允許多重 checkouts?51Testing软件测试网!R|z_Q$ra z
51Testing软件测试网nMVD;X&FJ"s+Y筆者的建議是,只有當你真正碰到的時候,才把這個功能打開。舉例來說,在一個專案裡面,可能會有一些共用的程式碼,這些共用的程式碼平時可能由一個人維護,例如:AppUtils.cpp;但是也有可能別的程式設計師寫了一些共用的函式,為了避免共用的程式碼散亂在太多檔案裡面,於是他希望把自己寫的共用函式也放到 AppUtils.cpp 裡面,於是便形成了多人要維護同一個檔案的情形,此時就很適合使用多重 checkouts 了,因為雖然改的是同一個檔案,各人要改的部分會彼此衝突的情況不多,此時 VSS 將可以自動處理 90% 以上的合併。
0n5kk!SI)x03.2 檔案的共享(Share)與分枝(Branch)
/@Q O }x)br3I0你可以指定一個檔案讓多個專案共享,方法是在 VSS Explorer 的專案面板中,挑選要共享的目錄,注意不是分享出去的目錄,而是指你現在想要使用別人的共享檔案的那個專案目錄,在該目錄上點右鍵,再點選〔Share〕,這時候出現的視窗才是要挑選來源的共享檔案,在視窗中選好要共享的檔案,然後按〔Share〕即可。參考下圖:
czL$|rw051Testing软件测试网:{"Ms.R_%{Gm!mozp:K8F$l)L051Testing软件测试网3rz,qOON
檔案設定成共享之後,當你對共享檔案 check out,不管是提供共享檔案的來源專案,還是使用這些共享檔案的專案,其目錄下都會有一份共享檔案的拷貝,但是 VSS 保證這些檔案內容都會一致,VSS 透過 Share 的設定來維護各專案間共享檔案的連結,讓共享檔案維持一個版本。51Testing软件测试网 Odoj'a
51Testing软件测试网x\ a%`#d^你也可以透過分枝(Branch)的功能來切斷共享檔案的連結,這意味著你不要再跟別人共享這個檔案了,而希望保有獨立發展的版本。做法是在 VSS Explorer 的右邊面板中,點選要切斷共享關係的檔案,然後點選〔SourceSafe\Branch...〕,接著會出現視窗請你確認,按〔OK〕鈕即可。切斷共享關係之後,其他專案的共享關係依然存在,只有自己跟別人脫離關係而已。51Testing软件测试网v/D[3jAmV
3.3 影子目錄(Shadow Folder)
&X Fk'`,_ y~*[0由於所有的修改記錄和最新版本的檔案都存在 VSS 資料庫中,如果其他人(例如:專案經理、系統分析師、建構師)經常需要讀取最新版的檔案,但是又不想要安裝 VSS,就可以使用 Shadow Folder 功能,讓這些人可以透過檔案總管的方式讀取檔案(只能讀取,不能修改)。設定 Shadow Folder 的方法是在 VSS Admin 工具中點選〔Tools\Options〕,然後切到 "Shadow Folders" 頁夾,先輸入要設定 shadow folder 的專案,你也可以點旁邊的〔Browse〕鈕,用滑鼠來選擇專案;接著輸入影子目錄的實體路徑名稱,設定完之後按〔確定〕鈕即可。如果你要一次設定多個專案的影子目錄,可以在每一個專案設定完後按〔Set Another〕鈕。參考下圖:51Testing软件测试网8]'j"M T+g+dk]n.P
iqdxi051Testing软件测试网E-l-SG r\P
LT*c#kg$H#fR0如果要取消影子目錄,只要先輸入專案名稱,然後把 "Set shadow folder to" 這個欄位清除就行了。
9?(utf SV dv2v;W051Testing软件测试网u-V:[)VB N-@注意:
8\9Zz-vo0- 影子目錄通常是伺服器上的目錄,建議使用 UNC 路徑名稱,若使用像 "C:\Projects" 之類的本機磁碟機名稱,則每個使用者的機器上都會維護一份 Shadow Folder 檔案。
- 你必須確定每個開發人員都有權限存取影子目錄,否則當他們 check in 檔案時,就會出現錯誤。
4. 結語
51Testing软件测试网 N Wd x;] sP6sy最後,筆者整理出幾個使用 VSS 時的重點步驟及快速鍵(假設資料庫和使用者帳戶都已經建立好了):
$U"yN}Z8a0- 登入 VSS 資料庫,開啟 VSS Explorer 時就會要求登入,也可以點選〔Files\Open SourceSafe Database...〕或按 Ctrl+P 來登入別的資料庫。
- 建立專案,〔File\Create Project...〕。
- 設定工作目錄,〔File\Set Working Folder...〕或按 Ctrl+D。
- 加入檔案,〔File\Add Files...〕或按 Ctrl+A。
- 取出檔案並修改,〔SourceSafe\Check Out〕或按 Ctrl+K。
- 修改完後送回伺服器,〔SourceSafe\Check In〕或按 Ctrl+U。
L.S U e"i@*n0其中只有最後兩個步驟是開發人員經常執行的動作。
}aQu(Nv(E0A0sw}m?n(Y0VSS 主要是依靠將檔案屬性設定成唯讀來提供檔案鎖定的機制,而其檔案傳遞的途徑則是透過傳統的 NetBIOS 和檔案共享機制,這使得 VSS 的應用範圍只能限制在區域網路內,如果能透過 TCP/IP 的方式傳輸檔案,適用的範圍會更廣,也會更方便 [註1]。