Fixing Goofs
水銀最大的好處之一翎冲,就是可以利用私有的克隆進行實驗或開發(fā)新的特征……如果它們沒有達到預期,你可以一秒之內刪掉它們鹏秋。
水銀讓你可以自由地實驗。試想一下在普通的編輯過程中亡笑,你可能陷入麻煩中甚至產(chǎn)生災難性的后果:
快要愛死emacs編輯器了侣夷。好在不是什么都沒了。最常用的恢復回來方法是使用 hg revert
那樣將把文件返回成最后提交的樣式仑乌。水銀不喜歡刪除任何東西百拓,而是重新命名:
如果你一步走得太遠了,也就是如果你已經(jīng)提交了晰甚,該怎么辦呢衙传?
這里有一個叫 hg rollback 命令可以拯救你,但是只能用在你沒有推送這一變化到其他任何人的情況厕九。它只撤銷一次提交蓖捶。
想象一下,你想做一個大的試驗扁远。你的老板雇傭了一位新的設計師俊鱼,Jim,最近你從他那兒得到的東西都很荒唐畅买。他給了綠色熒光的文字并闲,文字之間并不對齊(出于“藝術”考慮),用起來讓人覺得非常不爽皮获。你想要花一個周末的時間重新做整件事焙蚓,但是又害怕自己的想法不一定100%的比這古怪的圖像設計師好纹冤。Jim基本上從早上起床到晚上上床都一直叼著煙洒宝。你并不想因為這個而針對他,況且其他人都覺得只要他的設計足夠好萌京,抽不抽煙是人家的自由雁歌。不過講真,這也應該有個極限不是知残?況且他的設計也不怎么的靠瞎,加上他還總是很無禮。
使用水銀,你可克隆整個庫來做自己的實驗:
這并不像它看上去的那么沒效率乏盐,因為recipes文件夾和recipes-experiment文件夾共享了同樣的歷史佳窑。水銀還會使用一個稱為“hard links”的文件系統(tǒng)小技巧,使得拷貝可以變得非掣改埽快神凑,而不會占用過多的額外磁盤空間。
現(xiàn)在我們可以在這實驗的分支上做一系列改變:
這是我的大鱷梨醬實驗:
在這個實驗庫中何吝,我們可以自由提交
你可以自由的進行修改和工作溉委,想什么時候提交就什么時候提交。這給了你源碼控制的所有權利爱榕,哪怕你的實驗瘋狂之至瓣喊,也不會影響到別人。
如果你認為實驗走錯了方向黔酥,你只需要刪除整個實驗目錄藻三,問題解決了担敌,它消失不見了虹钮。
然而如果實驗成功了,你所要做的就是推送你的新改動葬荷。
它們去了哪里坑夯?
默認條目顯示你將推送的默認路徑庫岖寞,如果你不指定其他存儲庫的話,通常情況柜蜈,這是你克隆的庫仗谆,在這個例子中,它是一個本地目錄淑履,但是你也可以選擇一個URL地址隶垮。
不要忘了,我們把改動的版本推送到這個庫……
……并不意味著我們已經(jīng)在那個版本上工作了秘噪。
看到了嗎狸吞?“奶酪”在變更集5中,但是我的主倉庫工作在變更集4之上指煎。這是因為蹋偏,有人推送新的變動到倉庫中,并不意味著它們立刻會出現(xiàn)在我工作的目錄中至壤。所有我還在變更集4上工作威始。
如果我想看變更集5中的東西,必須使用 hg update 命令:
看看發(fā)生了什么像街?變更進入了工作目錄黎棠,但是在我工作過的版本的頂部晋渺。推送和拉取只會把變更從一個倉庫轉移到另一個倉庫——操作本身并不影響我當前工作目錄的文件。
現(xiàn)在脓斩,這是倉庫的狀態(tài):
水銀在倉庫之間移動變更是很靈活的木西,你可以直接從實驗庫推送到中央庫;
這種方式使得實驗倉庫中的變更5直接被推送到了中央倉庫中∷婢玻現(xiàn)在户魏,如果我回到我的庫中,就沒有什么可推送的了挪挤!
這是因為水銀知道central repo 已經(jīng)從別的地方得到這個特定的變更集叼丑。那樣非常有用,因為不然它將嘗試再次應用變更扛门,這樣將會產(chǎn)生大混亂鸠信。
之后他們給設計師Jim一項任務,他說他馬上就會開始工作论寨,但是他兩個月都沒出現(xiàn)星立。人們已經(jīng)幾乎忘了他和他的任務。當他第一次出現(xiàn)在辦公室開始工作的時候葬凳,他看起來有些曬黑绰垂。老實說,沒有人知道他是誰火焰,或者將會發(fā)生什么劲装。這有些意思。他的長相并沒有什么特點昌简。漸漸地同事們慢慢回想起來了占业。不過由于他是個新人,所以也沒人愿意去問他這兩個月究竟發(fā)生了什么纯赎。就像大家也不會問他臉上的抓痕與青塊是怎么回事一樣谦疾。不管怎樣,我們不喜歡那家伙犬金。
有的時候念恍,你會發(fā)現(xiàn)幾個月前,你曾經(jīng)犯了一個錯晚顷。
薯條? WTF?!(譯者注:What the Fuck?!)
水銀可以退回到過去的一個舊的變更集峰伙。從變更集中,指出與當前工作目錄不同的相對應的地方音同,讓我們試著回到版本2词爬。
看看剛剛發(fā)生了什么秃嗜?
現(xiàn)在权均,很長時間過去了顿膨,土豆條可能已經(jīng)從菜單中移除了,各種怪異的事情可能會發(fā)生叽赊,以致于想要合并這個變更變得幾乎不可能恋沃。在那種情況下,你將要解決合并沖突必指。我們將在下一教程進行討論囊咏。
自測
以下是你讀完這篇教程應該會做的:
- 在提交之前或之后,恢復意外的更改塔橡。
- 本地克隆倉庫來進行實驗梅割。
- 在倉庫之間推送。
- 修復倉庫久遠之前的歷史版本的錯誤葛家。