首頁 »
2005/09/21

TortoiseCVS 使用者手冊中文版(第三章)

TortoiseCVS 使用者手冊中文版 譯者:Jiing Deng http://jiing.org

第三章 TortoiseCVS的進階用法

建立一個新的檔案庫(Repository)或模組

一般而言, 一個系統管理者會在遠端伺服器上設定CVS檔案庫(repository)。然而,TortoiseCVS可本地或遠端地組態設定檔案庫(repository)和模組(如果你有正確的權限許可)。 要建立新的檔案庫(repository)和/或模組,在本地準備資料夾和檔案以作為新的測試沙箱。在你的新模組或檔案庫(repository)最上層的資料夾上按右鍵,並選擇CVS → Make New Module...選單項目。Make New Module Dialog會被顯示。當你想要取出(Checkout)時,為新的或既存的CVS檔案庫鍵入詳細的資料。按下OK來建立新模組。

圖 3.1. 建立新模組(Make New Module)對話盒 Fig 3.1 如果可以連上遠端CVS伺服器,但是CVS檔案庫(repository)不存在,你會看到下列的問題: 圖 3.2. 建立新檔案庫時的問題 Fig 3.2 要建立新的檔案庫,勾選Initialise a new repository here並按下OK。如果你在遠端伺服器上有正確的權限許可,TortoiseCVS會建立新的檔案庫(repository)。 一旦TortoiseCVS建立了一個新的或是連結到一個既存的CVS檔案庫(repository),新的模組會被建立。預設上,TortoiseCVS使用所選的資料夾的名稱作為新模組的名稱,不過你可以藉由修改Module 文字方塊(textbox)來改變它。

觀看(Watch)、編輯和反編輯(Unedit)

CVS也遵循大多數版本控制系統用的Lock/Unlock的語義,雖然CVS稱它為Edit/Unedit。然而,預設上此特色在CVS裡並沒有被開啟(enable),所以在你可以開始之前,你需要開啟Watch的功能。 當你以勾選checkbox的Check files read-only(在Options標籤上)的方式來建立一個新模組時,你可以使用TortoiseCVS來開啟Watch的功能。如果你希望在既存的模組上啟動watch功能,你會需要在模組的最上層執行下列的命令(使用Command Prompt): cvs watch on 一旦Watch功能被開啟,當你執行Checkout或Update時,作用中的檔案會被建立成唯讀的。要改變一或多個檔案,選擇目錄、檔案或你想要修改的檔案們,在其上按下滑鼠右鍵,並選擇CVS Edit選單項目。此命令根據檔案是純文字或是二元檔,其運作稍有不同。對於二元檔(例如.doc),TortoiseCVS在檔案上執行Update,然後檢查是否另一個使用者已經在編輯那個檔了。如果是這個情況,你不被允許去編輯它。對於純文字檔而言(例如.txt或.cpp),即使已有另一個使用者已經在編輯它,你也可以在檔案上工作;在這種情況下,TortoiseCVS會告知你這件事。 當你已經完成檔案的編輯,存入(commit)它們就如同正常情況時。然而,如果你決定你不想要改變選擇的檔案:在所選的檔案上按下滑鼠右鍵,並且選擇CVS → Unedit選單項目。TortoiseCVS會問你是否想要回復檔案到原始的版本(因此會遺失你所變更之處)。 如果你想要看看哪一個檔案正被編輯及被誰編輯,在Windows Explorer的任何地方按下滑鼠右鍵並選擇CVS → Show edited files選單項目。

Tagging 和 Labeling

在已知的發展階段上,給予一個或多個檔案共同的、指向它們修訂版本的標籤(label),這就是所謂的將這些檔案貼標籤(tagging)。Tagging一般用於整個模組,使得模組目前的狀態可以在未來被重新建構。此種tagging應該總在專案待傳送的部份(project deliverables)上被完成,並在開始主要的變動之前。 要用標籤(label)來tag一個或多個檔案或目錄,選擇那個目錄、檔案或你想要tag的檔案們。在所選項目上按右鍵,然後選擇CVS → Tag...選單項目。 圖 3.3. Tag 對話盒 Fig 3.3 然後你會看到Tag對話盒。在此你可以在Tag欄位輸入一個標籤(label)。CVS對tag將包含的字元有相當的限制。一個tag必須以字母開頭,且只可以包含字母,數字,「-(dash)」和「_ (底線)」。實際上,這代表沒有句點(dot),且沒有空白(space)。如果你想要在tag裡引入版本號碼,以「-」(dash)取代句點(dot)。有二個tag名稱被保留,因為它們在CVS裡有特殊的意義:「Head」代表在檔案庫(repository)中的最近可用版本,而「BASE」是你最後取出(check out)到本地目錄的修訂版本。 一旦輸入了標籤(label),按下OK鈕。不像大多數CVS操作,tag立即套用於檔案庫(repository),且不需要存入(commit)。 若需更多的資訊,請看建立快照:CVS Tag....(Making a Snapshot: CVS Tag....)

回復到檔案的較舊版本

開發人員偶爾需要還原(undo)已經被存入(check in)的變更之處。在TortoiseCVS中返回到特定的檔案修訂版本很容易: 1. 在檔案上按滑鼠右鍵並選擇CVS → History來帶出History 對話盒。 2.在修訂版本(revision)上按右鍵並選擇「Save this revision as...」選項。 3.當Save As對話盒出現時,不要按下「Save」鈕;取而代之地,在目錄列出的檔案名稱上雙擊。 4. 當TortoiseCVS指示你覆寫檔案時,回答「Yes」。

分枝和合併

版本控制系統的一個特色是:隔離變動到「個別的開發動線」上的能力。此線是所謂的分枝(Branch)。 分枝(Branching)用來控制軟體專案的生命週期的變動很有用。例如,假設你已經首次釋出你的軟體專案的第一版。你現在為了準備你的下一個主要釋出版本2.0,開始增加新的特色。你發現到在你的初次釋出版本和新的版本之間,軟體有瑕疵(bug)。目前原始碼的修訂版本在變遷(flux)的狀態,且預料至少一個月內無法達到穩定的狀態,因此無法根據最新的原始碼來做一個修正臭蟲(bugfix)釋出版本。 不要試著去對目前的版本,或是HEAD分枝(branch)做修正,取而代之地,你要對所有構成release 1.0的檔案的修訂樹(revision trees)上建立分枝。然後你可以對分枝做修改而不需要擾亂head分枝。當修改完成時,你可以整合它們到head分枝,或是將它們留在release 1.0分枝上。

建立分枝

要建立分枝(branch),選擇你想要分枝的檔案或目錄。在所選的項目上按滑鼠右鍵,並從內容選單中選擇CVS → Create Branch...。 圖 3.4. Branch對話盒 Fig 3.4 然後你會看到Branch對話盒。在此你可以在Branch欄位鍵入一個標籤。名稱限制的規則與套用到Tags上的一樣,同樣套用於Branches。一旦你已經鍵入想要的branch名稱,按下OK。不像大部份的CVS操作,分枝(branch)立即套用到檔案庫上,且不需要存入(commit)。然而,分枝(branch)只套用於檔案庫上。要開始在新建立的分枝(branch)上工作,選擇那個分枝(branch)來幹活。

選擇分枝(branch)來幹活

要開始在分枝而非在預設的開發動線上幹活,你必須繫結(bind)你的本地端複本到分枝。這需要確認諸如更新(update)、存入(commit)等……動作可在分枝上、而非在主要開發動線上運作。 要移動你的本地端複本到另一個分枝(branch),選擇專案最頂層的資料夾。如果你知道資料夾和檔案的資訊,你應該也可以選擇想要的分枝的部份確切資料夾和檔案。在所選項目上按滑鼠右鍵,然後選擇CVS → Update Special....。 圖 3.5. 特定更新對話盒(Update Special Dialog) Fig 3.5 然後你會看到特定更新對話盒(Update Special Dialog)。在此你可以在你希望選取的Get Tag/Branch/Revision欄位鍵入分枝名稱。按下OK鈕,TortoiseCVS現在做必需的更新以移動你的工作複本到想要的分枝(branch)。根據分枝(branch)的狀態,更新也可能包含新增或移除檔案。 TortoiseCVS放置黏貼的標籤(tag)到被分枝影響的檔案上。要移除黏貼的標籤(tag),你必須回到head分枝。

從分枝合併

當你對你在分枝上已做的變動感到滿意時,你可能想要那些在開發的head分枝上的變動能被用。整合一個分枝的變動到另一個分枝,是所謂的合併(merging)。 要從分枝(branch)合併,移動你的本地複本到你要想合併變動進去的分枝裡。詳見選擇一個分枝來幹活(Selecting a Branch to Work On)或回到Head分枝(Going Back to the Head Branch)。 圖 3.6. 合併對話盒(Merge Dialog) Fig 3.6 然後你會看到合併視窗(Merge Dialog)。在此你可以在你希望合併的Branch to merge from欄位鍵入分枝名稱。按下OK鈕,TortoiseCVS現在會合併特定分枝到你的本地複本。你的變動不會被套用於伺服器檔案庫(repository)上,直到你存入(commit)你的變動。 前述的合併會試著去合併從分枝開始的變動。如果你第二次做此操作(合併「在最後一次合併後於分枝上」的變動),從分枝的開始合併不是你想要的,而且它最可能讓你掉進麻煩裡。為了避開此問題,你應該在每次合併後給分枝一個新的tag,並且在當命名分枝以備接下來的合併時,使用新的tag。 注意:上一段只應用到標準的Unix CVS(也就是cvshome.org CVS)。如果你的伺服器執行CVSNT,你可以利用所謂「合併點(merge point)」的特性。這代表CVS持續追蹤你最後一次的合併,使得你可以毫不費勁地從同一個分枝重覆地合併。若需更多此特性的資訊,參見the CVSNT Wiki page(注意CVSNT手冊在此時點上尚未更新)。

回到Head分枝

如果你想要停止在分枝上工作,並且移動你的本地端複本回到主要開發動線,你必須讓TortoiseCVS移除所有黏貼的標籤(tags)。 為了移除黏貼tags,因此更新你的本地複本到主要開發動線,選擇專案的頂層資料夾。如果你知道資訊,你也可以就選擇意欲分枝的部份資料夾和檔案。在所選項目上按滑鼠右鍵,然後選擇CVS → Update Special....。 然後你會看到特定更新對話盒(Update Special Dialog)。選擇Return to main (HEAD) branch核選盒(checkbox)並按下OK鈕。TortoiseCVS現在會做必須的更新來將你工作中的複本移回到head分枝(branch)。

二元和萬國碼偵測

TortoiseCVS試著去自動地偵測你正新增到CVS的檔案類型。它可以偵測檔案是否是Text/ASCII, Text/Unicode, 或Binary。TortoiseCVS首先檢查檔案的副檔名來決定檔案是否是二元檔(Binary)或純文字檔(Text)。例如,.doc和.exe總是被預設是二元檔,而其它的副檔名,例如.cpp和.txt總是被預設是純文字檔。TortoiseCVS使用內建的、包含大部份常見檔案副檔名的二元檔和純文字副檔名的列表來做這件事。要自訂此列表,你可以從TortoiseCVS的安裝目錄複製檔案TortoiseCVS.FileTypes到你的HOME目錄(譯註:經與whiteg討論,覺得指的應是如C:\Documents and Settings\jiing的目錄,未實驗^^|||),並且編輯它以符合你的需要。 預設上,TortoiseCVS也會檢查檔案的前4000 bytes來決定類型。這被用來在檔案副檔名未知的情況。這前幾個的bytes也被用來決定檔案是Text/ASCII或Text/Unicode 。 TortoiseCVS也提供了複雜的外掛(plugin)機制,讓你可以實作DLL來執行檔案類型的偵測。詳細的外掛(plugin)介面可在FileTypes.config裡找到。 在所有的情況下,Add對話盒都會顯示「你可能新增其的檔案類型」的檔案,使得你有機會去修正已做的選擇。

檔案修訂歷史

TortoiseCVS提供二個回顧檔案的歷史和與其共同工作的方法。第一個是經由History對話盒。

History對話盒

藉由選擇檔案並右擊CVS → History,你可以看檔案的歷史。 圖 3.7. History對話盒 Fig 3.7 History對話盒也顯示對於所選的檔案的修訂、tags和分枝的紀錄。藉由在特定修訂版本、tag或分枝上按右鍵,它也提供你機會去找出差異(diff)及在本地端儲存修訂(save the revision locally),或是用黏貼tag來更新(update)(一個高階的CVS概念;通常比較偏好用save選項來做黏貼更新(sticky update))。藉由在修訂版本上按一下並輸入到視窗底部的文字區塊中,你也可以編輯任何目前或之前存入(commit)的訊息(記得在你移動到新的修訂版本前,按下Apply)。

修訂版本圖形對話盒

TortoiseCVS也提供一個修訂版本圖形對話盒來圖形化地顯示檔案的歷程給你看。你可以藉由選取它並按滑鼠右鍵CVS → Revision Graph來看一個檔案的修訂版本圖。 圖 3.8. 修訂版本圖形對話盒(Revision Graph Dialog) Fig 3.8 就像History對話盒,修訂版本圖形對話盒(Revision Graph Dialog)會讓你看見在任何修訂版本、tag或分枝(branch)上執行CVS的操作細節。 如果你的CVS伺服器執行CVSNT,你也將能夠看見哪個合併操作已經在檔案上被執行:紫色的箭頭從起點修訂(source revision)被拉出到終點修訂(destination revision)(詳見合併點(Mergepoints))。

Web紀錄

Web Log提供很多與History及修訂圖形(Revision Graph)對話盒相同的功能。一個重大的差異是Web Log不是TortoiseCVS本身的一部份,不過可能與被安裝在你使用的CVS伺服器上的特殊軟體相依。二個提供Web Log功能的熱門套件是ViewCVS和CVSweb──詢問你的CVS管理者,如果這二者其中之一可用。 要看Web Log,你用網頁瀏覽器來開啟一個特定的URL。TortoiseCVS知道最常用來看Web Log的URLs,且在大部份的情況下自動地偵測正確的那一個[2]。如果你的組態設定是非標準的,第一次時你可能必須手動地鍵入URL──下一次TortoiseCVS會記得它。 你可以藉由選擇一個檔案或資料夾並且右擊CVS → Web Log來觀看其Web Log。如果TortoiseCVS不能偵測到URL,下面的對話盒會出現。 圖 3.9. Web Log對話盒 Fig 3.9 鍵入正確的URL並按下OK。如果Web Log伺服器的URL已經變更,你可能必須告訴TortoiseCVS去再執行一次自動掃瞄。 ________________________________________ [2] 對於自動URL偵測的細節,請見Web Log如何自動偵測伺服器的URL(How Web Log Autodetects the Server URL)。

建立一個補綴檔

通常你可能有CVS檔案庫或模組的讀取權限,不過沒有寫入權限。開放原始碼專案通常以此方式運作以對所有對專案的貢獻維持品質管制。貢獻變動到這些專案的最簡單且最可靠的方式是去建立補綴檔(Patch File)來呈送給它們。 在TortoiseCVS中,藉由選取你希望包含在補綴檔的資料夾或有變動的檔案便可完成。在你所選項目上按滑鼠右鍵,並從內容選單中選擇CVS → Make Patch...。然後你會被一個Save對話盒提示去指出要儲存你的補綴檔到哪裡。最後,TortoiseCVS會在筆記本(Notepad)裡開啟新的補綴檔,在那裡你可以驗證你的變動。 有時候你的貢獻包含了新增新檔案,這些新檔案尚未在CVS裡。TortoiseCVS不能猜測說你想要這些檔案被包含進補綴(patch)之中,不過在Save對話盒裡你可以按下Browse鈕來帶出Add對話盒。在此你可以選擇要包含在補綴(patch)之中的檔案。


TortoiseCVS 使用者手冊中文版(第二章)←上一篇 │首頁