完成了以上的選擇和設(shè)置后,可以成功創(chuàng)建一個(gè)視圖了。
4 視圖的管理
視圖通常與任務(wù)對應(yīng),經(jīng)過一段時(shí)間的使用后,用戶因需要會(huì)創(chuàng)建了多個(gè)視圖,這涉及到視圖的管理和維護(hù)問題。
4 .1 與視圖相關(guān)的基本操作
對于普通開發(fā)人員而言,與視圖相關(guān)的操作主要包括視圖的創(chuàng)建和刪除,操作相對比較簡單。需要強(qiáng)調(diào)的是:在刪除視圖時(shí),要使用 ”Remove View”進(jìn)行操作,如圖9所示。如果使用”Remove View shortcut”,則只是刪除了該視圖的快捷方式,更新后還會(huì)再次出現(xiàn)。
靜態(tài)視圖有一個(gè)特有的操作是 update,需要定期進(jìn)行,才能和VOB中的數(shù)據(jù)保持同步。
圖 9
4.2 關(guān)于 hijacked文件
我們知道,靜態(tài)視圖將 VOB中的文件下載到本地后,文件是只讀的。如果你繞過檢出(checkout)操作,只是去掉某個(gè)需要更改文件的只讀屬性進(jìn)行操作,那么該文件被稱為“劫持”( hijacked)文件。 具體的表現(xiàn)為:在 ClearCase Explorer 中,處于“ hijacked ”的元素會(huì)有一個(gè)帶對號(hào)的紅色圓圈。
如果出現(xiàn)“ hijacked”,有兩種操作方式可供選擇:
• 鼠標(biāo)右擊“ Hijacked”的元素,選擇“Undo Hijacked”。為了不丟失你對文件所做的改動(dòng),Undo Hijacked之后,ClearCase自動(dòng)生成一個(gè)后綴為“keep”的私有文件(view private files),這時(shí)你不僅取消了Hijacked,同時(shí)也保存了你的工作成果(當(dāng)然如果不需要可以刪除這個(gè)私有文件)。
• 更新視圖( update view),然后鼠標(biāo)右擊“Hijacked”的元素,選擇“Check Out”,該元素將處于“checked out”狀態(tài),這時(shí)你可以繼續(xù)對該元素進(jìn)行改動(dòng),也可以直接做Check in操作, 完成文件變更的入庫,形成新的版本。
以上也給大家提供了利用靜態(tài)視圖離線或在家辦公的方法,還不錯(cuò)吧。
4.3 視圖的遷移
該部分內(nèi)容主要針對 ClearCase管理員而言。視圖的遷移主要是將View Server中的視圖在同一個(gè)機(jī)器中從一個(gè)存儲(chǔ)區(qū)域遷移到另外一個(gè)存儲(chǔ)區(qū)或者跨服務(wù)器間移動(dòng)。通常在視圖存儲(chǔ)空間不足或者為了提升View Server性能使用新服務(wù)器時(shí),需要進(jìn)行視圖的遷移,這樣原有的視圖信息不會(huì)被破壞,客戶端基本不受任何影響,遷移后可以正常使用原有的視圖。
下面我們舉例說明如何將視圖從 CCSERV1這臺(tái)視圖服務(wù)器遷移到CCSERV2上:
4.3.1 首先對CCSERV1上的所有用戶的視圖信息進(jìn)行備份。
4.3.2 將CCSERV2安裝為視圖服務(wù)器,并創(chuàng)建相應(yīng)的視圖存儲(chǔ)路徑。
4.3.3 做好以上準(zhǔn)備后,可以進(jìn)行正式的遷移工作。
• 在CCSERV1上停掉ClearCase服務(wù),如圖10所示。
• 使用ccopy命令將CCSERV1的視圖拷貝到CCSERV2上新建的視圖存儲(chǔ)目錄中,如:
ccopy G:cc_Storageviewsccview \ccserv2ccStorageviewsccview
上面的操作是將 CCSERV1中ccview目錄中的視圖信息拷貝到CCSERV2的ccview中,如果有多個(gè)目錄需要進(jìn)行拷貝可以寫成一個(gè)腳本統(tǒng)一進(jìn)行。
圖 10
4.3.4 確認(rèn)拷貝到CCSERV2的數(shù)據(jù)是否完整。
4.3.5 啟動(dòng)CCSERV1上的ClearCase服務(wù),在CCSERV2上對遷移的視圖進(jìn)行重新注冊。
因?yàn)榭赡苌婕暗匠砂偕锨У囊晥D,單個(gè)進(jìn)行注冊是不現(xiàn)實(shí)的,需要通過程序進(jìn)行;镜乃悸肥窍葘⒁晥D原有的注冊信息刪除,然后重新注冊到CCSERV2上去。這里給大家一個(gè)perl語言編寫的例子供參考:
printf ("All Views begin registering: ");
@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 " ";
printf("The old view stg is:%s ",$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 ",$new_view_stg);
$rc = system("cleartool register -view $new_view_stg");
if ($rc)
{
print LOG_F "$line ";
}
system("cleartool mktag -nstart -region soft1 -view -tag $view_tag $new_view_stg");
printf " ";
}
printf ("All Views register successfully! ");
上面的程序完成了將視圖在 CCSERV1上原有的信息刪除,然后重新注冊到CCSERV2的功能。這里需要注意的是:如果存在多個(gè)region,需要分別進(jìn)行處理。
4.3.6 驗(yàn)證遷移后的視圖使用是否正常。
在客戶端檢查原有的靜態(tài)和動(dòng)態(tài)視圖能否正常使用,可以做一些常見的操作,如checkout、checkin、update和mount(僅對動(dòng)態(tài)視圖)等。
4.3.7 檢查無誤后可以將CCSERV1上的視圖數(shù)據(jù)和視圖存儲(chǔ)路徑予以清除。
至此,整個(gè)視圖的遷移工作大功告成。
4.4 視圖的清除
因?yàn)橛脩魧σ晥D處理不當(dāng),在經(jīng)過一段時(shí)間的運(yùn)作后,會(huì)出現(xiàn)一些垃圾視圖(即已經(jīng)不再使用但沒有被徹底清除),日積月累會(huì)嚴(yán)重影響 ClearCase 服務(wù)器的性能?梢允褂靡韵旅钣枰詮氐椎那宄
cleartool rmtag -view $tag;
cleartool rmview -force -all -uuid $uuid;
cleartool unregist -view -uuid $uuid;
以上命令需要的 tag 、 uuid 信息可以通過 lsview 命令獲取,將這些命令進(jìn)行組合,寫成一個(gè)腳本便可以實(shí)現(xiàn)批量清除垃圾視圖。
5 總結(jié)
本文對 Base ClearCase中的View進(jìn)行了較為詳細(xì)的介紹(UCM方式基于活動(dòng),故有所差異,本文沒有提及),希望能對大家有所啟示。由于View本身牽涉內(nèi)容較多,如有更深層次的需求,可以參考ClearCase自帶的用戶手冊,做進(jìn)一步的研究。
本文縮略語:
VOB(Versioned Object Base): 版本對象庫,ClearCase 數(shù)據(jù)的存儲(chǔ)庫,它存儲(chǔ)了處于版本控制下所有的文件、目錄和元數(shù)據(jù)等。
View: 視圖,它可以選擇所指定任務(wù)的每一個(gè)文件或目錄的適當(dāng)版本,并呈現(xiàn)它們。
View Server:存儲(chǔ)View數(shù)據(jù)的服務(wù)器。
MVFS(Multiversioned File System):多版本文件系統(tǒng),它通過使用標(biāo)準(zhǔn)操作系統(tǒng)協(xié)議增加一個(gè)新文件系統(tǒng)類型,MVFS提供了透明的版本控制機(jī)制。