總結(jié)Clearcase的開發(fā)使用
ClearCase就是一個軟件開發(fā)的版本控制系統(tǒng)崖面,不熟悉的人可以把它和git相類比唾糯,類似于windows和linux是兩個操作系統(tǒng)一樣柄驻。
ClearCase和Git就是兩個版本控制系統(tǒng)县习。它們都有類似的操作掘而,不過卻有不同的命令等迫悠,更細(xì)的話還能講到原理上的區(qū)別鹏漆,這里不作贅述。
本文內(nèi)容只包含:通過shell在服務(wù)器上來使用Clearcase進(jìn)行版本控制的基本操作。
一艺玲、先搞懂2個概念:elements, version.
a. 在因?yàn)閏learcase是版本控制系統(tǒng)括蝠,可以很簡單地理解為,對元素進(jìn)行版本控制饭聚。
b. elements=元素,是數(shù)據(jù)庫中存儲的文件或者目錄忌警。
c. version=版本:每一個element(文件或目錄)都有多個版本(比如我們寫畢業(yè)論文的時候,會給每次更新的畢業(yè)論文取名為:畢業(yè)論文v1, 畢業(yè)論文v20等)秒梳。
d. 所有的文件法绵,在被check out之前,都是只讀的酪碘;
e. 建立分支branch和合并merge的操作是沒有次數(shù)限制的朋譬。
二、再明白4個名詞:vob兴垦,label 徙赢,branch,view
VOB:Versioned Object Base, 它是clearcase數(shù)據(jù)庫(存儲elements with versions)滑进,所有開發(fā)文件的所有版本都在這個庫里面犀忱。比如一個團(tuán)隊開發(fā)了一個軟件,這個軟件相關(guān)的所有開發(fā)文件都存在vob里扶关,如果軟件在不停迭代阴汇,那么在迭代過程中產(chǎn)生的所有文件也都存在vob里。
?一個公司一般會開發(fā)很多款產(chǎn)品节槐,這些產(chǎn)品的開發(fā)文件都在vob里搀庶。那么不同的產(chǎn)品團(tuán)隊為了開發(fā)自己產(chǎn)品,會在vob里對應(yīng)位置進(jìn)行開發(fā)铜异。比如團(tuán)隊A開發(fā)的產(chǎn)品是alpha,那他們的開發(fā)路徑在/vobs/alpha;團(tuán)隊B開發(fā)的產(chǎn)品是beta,那他們的開發(fā)路徑在/vobs/beta哥倔;以此類推。
https://img-blog.csdnimg.cn/20190416140551292.png
這里有一個版本控制樹揍庄。0咆蒿,1,2蚂子,3沃测,4,5表示的是 版本號食茎。
Label: 顧名思義蒂破,就是標(biāo)簽的意思。通過標(biāo)簽别渔,我們可以快速找到想要的文件或者目錄附迷。
每一個element可能擁有相同的標(biāo)簽惧互,但是,任何一個element的版本樹上的某個label名稱只有一個實(shí)例喇伯。比如下面的source.c這個元素喊儡,它的版本樹上,從0到5個版本都可以打標(biāo)簽艘刚,但是標(biāo)簽絕不能打一樣的管宵,不然你怎么找到對應(yīng)版本呢,是吧攀甚。那如果,現(xiàn)在有個元素source1.c岗喉,它也有個版本樹秋度,它的對應(yīng)版本的標(biāo)簽可以和source.c的一模一樣,也可以不一樣钱床。
https://img-blog.csdnimg.cn/20190416140551544.png
a. 一個元素的任何版本都可以有多個標(biāo)簽荚斯。還是用上面那個圖舉例子,source.c的版本1的標(biāo)簽是LINGLONG1_1.0,我們還可以給版本1再設(shè)置個標(biāo)簽如:LL1_1.0;
b. 根據(jù)傳統(tǒng)查牌,標(biāo)簽名應(yīng)該所有字母都大寫事期。
c. 給元素打標(biāo)簽的相關(guān)命令是:
? ? ? ?$cleartool mkbrtype -global -pbranch LABEL_TYPE@VOB_TAG
? ? ? ?$cleartool mklabel -recurse $LABEL_TYPE$ELEMENT //把標(biāo)簽LABEL_TYPE達(dá)到元素ELEMENT上
d. 列出標(biāo)簽:
? ? ? ? $cleartool lstype -kind lbtype
Branch: 分支。顧名思義就像是一棵樹的主干上長出了分支一樣纸颜。每個元素都有一個版本樹兽泣,對吧。那比如現(xiàn)在胁孙,我要對產(chǎn)品中的一個功能進(jìn)行改進(jìn)或者是要修復(fù)一個bug,假設(shè)這個功能代碼或者bug的位置在相關(guān)元素版本樹上的標(biāo)簽為T1_3.0的地方唠倦。那我們就從這個標(biāo)簽這里新建一個分支,表明我要對該元素某版本進(jìn)行改動啦涮较。分支名字就叫做T1_myName稠鼻,每個人都不能干擾別人的開發(fā)。
a. 如上圖狂票,我從T1_1.0那里建了一個分支候齿,我在自己的分支上進(jìn)行開發(fā),開發(fā)的最新版本為2闺属。別人也在這里建了一個他的分支慌盯,不過這跟我不沖突。
b. 給你們看看真實(shí)開發(fā)過程中的復(fù)雜場景屋剑,哈哈哈哈
view:?就是workspace. 通過view來選擇element(文件或目錄)的某個版本润匙。這樣的話每個開發(fā)者的工作就互不干擾啦。
a. view的一些常見操作:
? ? i) 進(jìn)入一個view:$cleartool setview VIEWNAME
? ? ii) 列出現(xiàn)有view:cleartool lsview
? ? iii) 列出目前進(jìn)入的view:$cleartool pwv
? ? iv) 退出一個view:$exit
? ? ?v) 新建view:$cleartool mkview -tag tmpA_view? /hosts/node-name/home/cleardata/viws/tmepA_view
b. 比如我現(xiàn)在沒有太多Clearcase下的開發(fā)經(jīng)驗(yàn)唉匾。我想建一個自己的workspace來練習(xí)一個操作孕讳。于是我就先去新建一個view by復(fù)制一個別人的view.具體操作如下:
? ? ? i) 別人的view的標(biāo)簽假設(shè)是alpha_project.1_tom匠楚;
? ? ? ii) 我先進(jìn)入到這個view:$cleartool setview alpha_project.1_tom;
? ? ? iii) 通過這個view來new一個自己的view厂财;
? ? ? iv) 再次用$cleartool setview myview來set工作view芋簿;
? ? ? v) new 一個branch, 在branch上check out 一個文件;
? ? ? ?vi) 對check out了的文件進(jìn)行修改璃饱;
? ? ? ?vii) 把這個文件check in 回自己的branch与斤;
? ? ? ?viii) 把這個文件merge到版本樹的主干上?;
三荚恶、Configuration Specitication
a. 每個view都有一個配置文件:它定義了選擇element版本的規(guī)則撩穿。
b. 每當(dāng)你新建一個view,就會自動生成一個default config spec(默認(rèn)配置文件)。
c. 這個默認(rèn)配置文件篩選的 文件或目錄是這樣的:
? ? ? i) 被check out了的谒撼;
? ? ? ii) 是版本樹主干上的最新版本食寡。
d. 要修改配置文件,命令是:$cleartool edcs??? (edcs 意思是edit config spec)
e. 查看配置文件的命令:$cleartool catcs? (catcs 意思是cat config spec)
我們已經(jīng)知道廓潜,要進(jìn)行自己的開發(fā)工作時抵皱,需要先建立一個自己的分支branch,然后在自己的branch上要修改一個element的時候辩蛋,必須先對這個element進(jìn)行check out操作呻畸。如果我們現(xiàn)在直接對一個element進(jìn)行check out,你猜會發(fā)生什么悼院?你在想伤为,咱們的branch都沒建呢,怎么能check out一個element呢樱蛤?沒錯钮呀,必須要在分支上才能對元素進(jìn)行check out,這種直接check out文件或目錄的操作昨凡,會觸發(fā)一個自動建立分支的級聯(lián)操作爽醋。
四肴捉、Check out
a. 對文件或目錄check out后朝蜘,我們才能對它們進(jìn)行修改。
b. 如果一個元素以及被check out 為“reserved”,那就不能再把它c(diǎn)heck out為“reserved”,只能把它c(diǎn)heck out為"unreserved".
c. 被check out為"unreserved"的文件跨琳,在“reserved”文件掛起的時候哪痰,是不能被check in的遂赠。
d. 如果想把“unreserved”文件check in, 那么必須先 解決“reserved”checkouts.
e. check out 一個ELEMENT的命令是: $Cleartool co -nc ELEMENT
五晌杰、Check in
a. check in 文件或者目錄會把新版本的元素添加到VOB中跷睦。
b. check in 一個ELEMENT的命令是 :$cleartool ci -nc ELEMENT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? $cleartool unco ELEMENT
六、添加ELEMENT
a. 給版本控制庫中添加element的命令是:$cleartool mkelem ELEMENT(這個ELEMENT應(yīng)該事先存在肋演,且它的父目錄應(yīng)該已經(jīng)被check out了)
b. 新建目錄:$cleartool mkdir DIRECTORY(這個DIRECTORY不能已存在且它的父目錄應(yīng)該已經(jīng)被check out了)
c. 導(dǎo)入目錄:$clearfsimport -recurse -nsetevent SOURCE TARGET
d. 刪除元素:$cleartool rmelem ELEMENT
e. 查看所有nocheckout狀態(tài)的元素:$cleartool ls?
七抑诸、Merge合并(把修改后的元素merge到某個版本上)
a. 這個merge是用來合并被修改過的文件烂琴。
b. Merge 之前一定要先 review code,不僅自己,還有上級review, 直到上級review通過之后才能merge.
c. merge相關(guān)的命令:
? ? ? ? ? ? ? ?$cleartool merge
? ? ? ? ? ? ? ?$cleartool diff
d. 列出可以merge的文件: $cleartool findmerge . -ftag VIEW_TAG -print
e. 列出可以merge的文件并自動merge: $cleartool findmerge . -ftag VIEW_TAG -nc -merge
八蜕乡、查詢cleartool的其他命令可以用
$cleartool man
$cleartool man COMMAND
---------------------
作者:panda愛學(xué)習(xí)
來源:CSDN
原文:https://blog.csdn.net/NXHYD/article/details/89332183
版權(quán)聲明:本文為博主原創(chuàng)文章奸绷,轉(zhuǎn)載請附上博文鏈接!