分布式版本控制軟件水銀(Mercurial)使用指南3

Fixing Goofs

翻譯自http://hginit.com/03.html

水銀最大的好處之一,就是可以利用私有的克隆進(jìn)行實(shí)驗(yàn)或開發(fā)新的特征……如果它們沒有達(dá)到預(yù)期,你可以一秒之內(nèi)刪掉它們。

水銀讓你可以自由地實(shí)驗(yàn)。試想一下在普通的編輯過程中,你可能陷入麻煩中甚至產(chǎn)生災(zāi)難性的后果:

圖1

快要愛死emacs編輯器了。好在不是什么都沒了。最常用的恢復(fù)回來方法是使用 hg revert

圖2

那樣將把文件返回成最后提交的樣式。水銀不喜歡刪除任何東西,而是重新命名:

圖3

如果你一步走得太遠(yuǎn)了,也就是如果你已經(jīng)提交了,該怎么辦呢?

圖4

這里有一個(gè)叫 hg rollback 命令可以拯救你,但是只能用在你沒有推送這一變化到其他任何人的情況。它只撤銷一次提交。

圖5

想象一下,你想做一個(gè)大的試驗(yàn)。你的老板雇傭了一位新的設(shè)計(jì)師,Jim,最近你從他那兒得到的東西都很荒唐。他給了綠色熒光的文字,文字之間并不對(duì)齊(出于“藝術(shù)”考慮),用起來讓人覺得非常不爽。你想要花一個(gè)周末的時(shí)間重新做整件事,但是又害怕自己的想法不一定100%的比這古怪的圖像設(shè)計(jì)師好。Jim基本上從早上起床到晚上上床都一直叼著煙。你并不想因?yàn)檫@個(gè)而針對(duì)他,況且其他人都覺得只要他的設(shè)計(jì)足夠好,抽不抽煙是人家的自由。不過講真,這也應(yīng)該有個(gè)極限不是?況且他的設(shè)計(jì)也不怎么的,加上他還總是很無禮。

使用水銀,你可克隆整個(gè)庫(kù)來做自己的實(shí)驗(yàn):

圖6

這并不像它看上去的那么沒效率,因?yàn)?strong>recipes文件夾和recipes-experiment文件夾共享了同樣的歷史。水銀還會(huì)使用一個(gè)稱為“hard links”的文件系統(tǒng)小技巧,使得拷貝可以變得非??欤粫?huì)占用過多的額外磁盤空間。

現(xiàn)在我們可以在這實(shí)驗(yàn)的分支上做一系列改變:

圖7

這是我的大鱷梨醬實(shí)驗(yàn):

圖8

在這個(gè)實(shí)驗(yàn)庫(kù)中,我們可以自由提交

圖9

你可以自由的進(jìn)行修改和工作,想什么時(shí)候提交就什么時(shí)候提交。這給了你源碼控制的所有權(quán)利,哪怕你的實(shí)驗(yàn)瘋狂之至,也不會(huì)影響到別人。

如果你認(rèn)為實(shí)驗(yàn)走錯(cuò)了方向,你只需要?jiǎng)h除整個(gè)實(shí)驗(yàn)?zāi)夸?,問題解決了,它消失不見了。

然而如果實(shí)驗(yàn)成功了,你所要做的就是推送你的新改動(dòng)。

圖10

它們?nèi)チ四睦铮?/p>

圖11

默認(rèn)條目顯示你將推送的默認(rèn)路徑庫(kù),如果你不指定其他存儲(chǔ)庫(kù)的話,通常情況,這是你克隆的庫(kù),在這個(gè)例子中,它是一個(gè)本地目錄,但是你也可以選擇一個(gè)URL地址。

圖12

不要忘了,我們把改動(dòng)的版本推送到這個(gè)庫(kù)……

圖13

……并不意味著我們已經(jīng)在那個(gè)版本上工作了。

圖14

看到了嗎?“奶酪”在變更集5中,但是我的主倉(cāng)庫(kù)工作在變更集4之上。這是因?yàn)?,有人推送新的變?dòng)到倉(cāng)庫(kù)中,并不意味著它們立刻會(huì)出現(xiàn)在我工作的目錄中。所有我還在變更集4上工作。

圖15

如果我想看變更集5中的東西,必須使用 hg update 命令:

圖16

看看發(fā)生了什么?變更進(jìn)入了工作目錄,但是在我工作過的版本的頂部。推送拉取只會(huì)把變更從一個(gè)倉(cāng)庫(kù)轉(zhuǎn)移到另一個(gè)倉(cāng)庫(kù)——操作本身并不影響我當(dāng)前工作目錄的文件。

現(xiàn)在,這是倉(cāng)庫(kù)的狀態(tài):

圖17

水銀在倉(cāng)庫(kù)之間移動(dòng)變更是很靈活的,你可以直接從實(shí)驗(yàn)庫(kù)推送到中央庫(kù);

圖18

這種方式使得實(shí)驗(yàn)倉(cāng)庫(kù)中的變更5直接被推送到了中央倉(cāng)庫(kù)中?,F(xiàn)在,如果我回到我的庫(kù)中,就沒有什么可推送的了!

圖19

這是因?yàn)樗y知道central repo 已經(jīng)從別的地方得到這個(gè)特定的變更集。那樣非常有用,因?yàn)椴蝗凰鼘L試再次應(yīng)用變更,這樣將會(huì)產(chǎn)生大混亂。

之后他們給設(shè)計(jì)師Jim一項(xiàng)任務(wù),他說他馬上就會(huì)開始工作,但是他兩個(gè)月都沒出現(xiàn)。人們已經(jīng)幾乎忘了他和他的任務(wù)。當(dāng)他第一次出現(xiàn)在辦公室開始工作的時(shí)候,他看起來有些曬黑。老實(shí)說,沒有人知道他是誰(shuí),或者將會(huì)發(fā)生什么。這有些意思。他的長(zhǎng)相并沒有什么特點(diǎn)。漸漸地同事們慢慢回想起來了。不過由于他是個(gè)新人,所以也沒人愿意去問他這兩個(gè)月究竟發(fā)生了什么。就像大家也不會(huì)問他臉上的抓痕與青塊是怎么回事一樣。不管怎樣,我們不喜歡那家伙。

有的時(shí)候,你會(huì)發(fā)現(xiàn)幾個(gè)月前,你曾經(jīng)犯了一個(gè)錯(cuò)。

圖20

薯?xiàng)l? WTF?!(譯者注:What the Fuck?!)

水銀可以退回到過去的一個(gè)舊的變更集。從變更集中,指出與當(dāng)前工作目錄不同的相對(duì)應(yīng)的地方,讓我們?cè)囍氐桨姹?。

圖21

看看剛剛發(fā)生了什么?

圖22

現(xiàn)在,很長(zhǎng)時(shí)間過去了,土豆條可能已經(jīng)從菜單中移除了,各種怪異的事情可能會(huì)發(fā)生,以致于想要合并這個(gè)變更變得幾乎不可能。在那種情況下,你將要解決合并沖突。我們將在下一教程進(jìn)行討論。

自測(cè)

以下是你讀完這篇教程應(yīng)該會(huì)做的:

  1. 在提交之前或之后,恢復(fù)意外的更改。
  2. 本地克隆倉(cāng)庫(kù)來進(jìn)行實(shí)驗(yàn)。
  3. 在倉(cāng)庫(kù)之間推送。
  4. 修復(fù)倉(cāng)庫(kù)久遠(yuǎn)之前的歷史版本的錯(cuò)誤。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容