Rational ClearCase 作為一款功能強大的軟件配置管理( SCM )工具,在國內已經得到許多企業用戶的認可并被廣泛采納。為了幫助大家更好的了解和使用 ClearCase ,本文將全方位解剖 ClearCase 的重要組成部分:視圖( View )。
2 ClearCase視圖的分類
我們知道,軟件配置管理工具的一個基本功能是建立和管理開發人員的工作空間。在 ClearCase 中,工作空間被稱為視圖( View ),它可以選擇所指定任務的每一個文件或目錄的適當版本,并將它們呈現給使用者。通俗的講, View 就像一個過濾器,依據一組配置規則從 VOB 中將我們需要的文件或目錄的版本選擇出來。 View 是訪問 VOB 庫中文件和目錄版本的手段,通過視圖,用戶可以瀏覽、修改、構建可用的文件和目錄。
在實際使用中, View 分為兩種類型,即 Dynamic View (動態視圖)和 Snapshot View (靜態視圖,又稱快照視圖)。下面我們來看看這兩種視圖有什么差異:
動態視圖:
• 自動保持與 VOB 庫的同步更新;
• 使用 MVFS 文件系統透明訪問 VOB 庫,不占用本機空間;
動態視圖無需將文件拷貝到本地目錄,通過虛擬文件系統對 VOB 中的版本進行存取操作。
• 動態視圖的使用依賴于網絡;
• 提供了共享派生對象和構建審計功能,這是動態視圖獨有的。
• 動態視圖通過 mount 指定的 VOB 庫來獲取數據。
動態視圖采用 mount 的方式獲取 VOB 中的數據,速度比較快,它是一個全局視圖。
靜態視圖:
• 只能定期通過 update 操作實現文件的更新;
• 文件被下載到本地,占用本地空間;
• 可以離線工作,斷網使用;
• 可以在本地進行高速編譯;
• 使用靜態視圖占用 ClearCase 服務器資源較少;
• 靜態視圖通過 load 指定的 VOB 庫來查看文件。
因此你可以只選擇下載與你的需要有關的文件拷貝(除非你需要所有的內容),這個可通過通過專門的下載規則來實現。當然靜態視圖也可以卸載在下載規則中被過濾和刪除的文件。
通過對兩種視圖比較,我們會發現它們各有千秋。在實際使用中,當你希望離線工作或只需要 VOB 庫中的部分代碼時,建議使用靜態視圖,這樣還能減少因對服務器頻繁訪問所造成的壓力。如果你使用便攜式電腦,使用靜態視圖則更加便利。
當需要節省本地磁盤空間、希望頻繁自動更新或者僅僅是為了查看文檔、代碼,創建動態視圖既快速又不占用本機空間,是個不錯的選擇。
3 如何創建視圖
當你安裝了 ClearCase 客戶端軟件后,要做的第一件事就是創建 View 。如圖 1 所示,我們打開 ClearCase Explorer ,以 Base ClearCase 為例,在工具欄里有一項“ Create View ”:
圖 1
點擊“ Create View ”后,出現圖 2 ,因為我們是以 Base ClearCase 為例,這里選擇默認即可。
圖 2
根據你的需求選擇創建 Snapshot View 或者 Dynamic View ,見圖 3 所示:
圖 3
如果你要創建靜態視圖,如圖 4 ,需要指定該視圖在本機的存儲路徑(存放從 VOB 庫中 load 的文件和目錄)。
圖 4
如果你要創建動態視圖,則只需要指定一個映射盤符即可,見圖 5 。因為動態視圖是通過 MVFS 訪問 VOB 庫中的數據,不需要將數據下載到本機。
圖 5
在圖 4 和圖 5 中都有一個“ Advanced Options ”按鈕,點擊進入后見圖 6 ,這里可以選擇你的視圖是存儲在服務器端還是本機。 ClearCase 的 View 數據(主要是 View database 等)既可以存放在 View Server 中,也可以存放在本機。一般建議存放在 View Server 中,以便組織進行統一管理。
圖 6
選擇完成后,將進入如圖 7 所示界面,這里有一個“ Inspect Config Spec ”,用來定義該視圖的配置規約( Config Spec ),配置規約將決定哪些版本可以看到,點擊進入:
圖 7
進入“ Inspect Config Spec ”后,我們會發現里面有默認的規約,見圖 8 ,可以直接使用。通常管理員或配置經理會根據開發的需要編寫一些特定的配置規約供開發人員使用,在這里進行選擇和修改。
圖 8
完成了以上的選擇和設置后,就可以成功創建一個視圖了。
4 視圖的管理
視圖通常與任務對應,經過一段時間的使用后,用戶因需要會創建了多個視圖,這就涉及到視圖的管理和維護問題。
4 .1 與視圖相關的基本操作
對于普通開發人員而言,與視圖相關的操作主要包括視圖的創建和刪除,操作相對比較簡單。需要強調的是:在刪除視圖時,要使用 ”Remove View”進行操作,如圖9所示。如果使用”Remove View shortcut”,則只是刪除了該視圖的快捷方式,更新后還會再次出現。
靜態視圖有一個特有的操作是 update,需要定期進行,才能和VOB中的數據保持同步。
圖 9
4.2 關于 hijacked文件
我們知道,靜態視圖將 VOB中的文件下載到本地后,文件是只讀的。如果你繞過檢出(checkout)操作,只是去掉某個需要更改文件的只讀屬性就進行操作,那么該文件就被稱為“劫持”( hijacked)文件。 具體的表現為:在 ClearCase Explorer 中,處于“ hijacked ”的元素會有一個帶對號的紅色圓圈。
如果出現“ hijacked”,有兩種操作方式可供選擇:
• 鼠標右擊“ Hijacked”的元素,選擇“Undo Hijacked”。為了不丟失你對文件所做的改動,Undo Hijacked之后,ClearCase自動生成一個后綴為“keep”的私有文件(view private files),這時你不僅取消了Hijacked,同時也保存了你的工作成果(當然如果不需要可以刪除這個私有文件)。
• 更新視圖( update view),然后鼠標右擊“Hijacked”的元素,選擇“Check Out”,該元素將處于“checked out”狀態,這時你可以繼續對該元素進行改動,也可以直接做Check in操作, 完成文件變更的入庫,形成新的版本。
以上也給大家提供了利用靜態視圖離線或在家辦公的方法,還不錯吧。
4.3 視圖的遷移
該部分內容主要針對 ClearCase管理員而言。視圖的遷移主要是將View Server中的視圖在同一個機器中從一個存儲區域遷移到另外一個存儲區或者跨服務器間移動。通常在視圖存儲空間不足或者為了提升View Server性能使用新服務器時,需要進行視圖的遷移,這樣原有的視圖信息不會被破壞,客戶端基本不受任何影響,遷移后可以正常使用原有的視圖。
下面我們舉例說明如何將視圖從 CCSERV1這臺視圖服務器遷移到CCSERV2上:
4.3.1 首先對CCSERV1上的所有用戶的視圖信息進行備份。
4.3.2 將CCSERV2安裝為視圖服務器,并創建相應的視圖存儲路徑。
4.3.3 做好以上準備后,就可以進行正式的遷移工作。
• 在CCSERV1上停掉ClearCase服務,如圖10所示。
• 使用ccopy命令將CCSERV1的視圖拷貝到CCSERV2上新建的視圖存儲目錄中,如:
ccopy G:\cc_Storage\views\ccview \\ccserv2\cc_ Storage\views\ccview
上面的操作是將 CCSERV1中ccview目錄中的視圖信息拷貝到CCSERV2的ccview中,如果有多個目錄需要進行拷貝可以寫成一個腳本統一進行。
圖 10
4.3.4 確認拷貝到CCSERV2的數據是否完整。
4.3.5 啟動CCSERV1上的ClearCase服務,在CCSERV2上對遷移的視圖進行重新注冊。
因為可能涉及到成百上千的視圖,單個進行注冊是不現實的,需要通過程序進行;镜乃悸肥窍葘⒁晥D原有的注冊信息刪除,然后重新注冊到CCSERV2上去。這里給大家一個perl語言編寫的例子供參考:
printf ("All Views begin registering:\n");
@lines = `cleartool lsview -region soft1 -s`;
foreach $line(@lines)
{
chomp ($line);
$view_info = `cleartool lsview -region soft1 $line`;
chomp ($view_info);
$view_info =~ m/(\S+)\s+(\S+)/;
$view_tag = $1;
$view_stg = $2;
printf "\n";
printf("The old view stg is:%s\n",$view_stg);
system("cleartool rmtag -view -region soft1 $view_tag");
system("cleartool unregister -view $view_stg");
$new_view_stg = $view_stg;
chomp ($new_view_stg);
if ($new_view_stg =~ m/ccview/)
{
$new_view_stg=~ s/\\\\ccserv1\\ccview\\views/\\\\ccserv2\\ccview \\views/;
}
printf ("The new_view_stg is:%s\n",$new_view_stg);
$rc = system("cleartool register -view $new_view_stg");
if ($rc)
{
print LOG_F "$line\n";
}
system("cleartool mktag -nstart -region soft1 -view -tag $view_tag $new_view_stg");
printf "\n";
}
printf ("All Views register successfully!\n");
上面的程序完成了將視圖在 CCSERV1上原有的信息刪除,然后重新注冊到CCSERV2的功能。這里需要注意的是:如果存在多個region,需要分別進行處理。
4.3.6 驗證遷移后的視圖使用是否正常。
在客戶端檢查原有的靜態和動態視圖能否正常使用,可以做一些常見的操作,如checkout、checkin、update和mount(僅對動態視圖)等。
4.3.7 檢查無誤后可以將CCSERV1上的視圖數據和視圖存儲路徑予以清除。
至此,整個視圖的遷移工作大功告成。
4.4 視圖的清除
因為用戶對視圖處理不當,在經過一段時間的運作后,會出現一些垃圾視圖(即已經不再使用但沒有被徹底清除),日積月累會嚴重影響 ClearCase 服務器的性能?梢允褂靡韵旅钣枰詮氐椎那宄
cleartool rmtag -view $tag;
cleartool rmview -force -all -uuid $uuid;
cleartool unregist -view -uuid $uuid;
以上命令需要的 tag 、 uuid 信息可以通過 lsview 命令獲取,將這些命令進行組合,寫成一個腳本便可以實現批量清除垃圾視圖。
5 總結
本文對 Base ClearCase中的View進行了較為詳細的介紹(UCM方式基于活動,故有所差異,本文沒有提及),希望能對大家有所啟示。由于View本身牽涉內容較多,如有更深層次的需求,可以參考ClearCase自帶的用戶手冊,做進一步的研究。
本文縮略語:
VOB(Versioned Object Base): 版本對象庫,ClearCase 數據的存儲庫,它存儲了處于版本控制下所有的文件、目錄和元數據等。
View: 視圖,它可以選擇所指定任務的每一個文件或目錄的適當版本,并呈現它們。
View Server:存儲View數據的服務器。
MVFS(Multiversioned File System):多版本文件系統,它通過使用標準操作系統協議增加一個新文件系統類型,MVFS提供了透明的版本控制機制。
文章來源于領測軟件測試網 http://www.k11sc111.com/