Repository Architecture
水銀給了你相當(dāng)大的建庫自由度驮瞧。由于合并是如此好用醉冤,你可以根據(jù)你的開發(fā)進(jìn)度來維護(hù)一些特殊用途的倉庫
我們的菜單已經(jīng)變的相當(dāng)漂亮了:
我們來更加仔細(xì)地看一看變更集的序號:
數(shù)字的第一部分桃熄,13卦停,很短也很方便弦悉。它只有一個問題……它不可靠耿戚!
當(dāng)團(tuán)隊(duì)里的人各自工作并且將其成果合并湿故,那些短號是不同步的:
因此,我沒辦法跟人們說:“好吧膜蛔,咱們來將版本轉(zhuǎn)移到變更集13上坛猪。”因?yàn)槊總€人的13有可能是不同的飞几。這就是為什么那個瘋狂的十六進(jìn)制數(shù)存在的原因砚哆。
這個十六進(jìn)制數(shù)在所有的倉庫中都是一致的并且永遠(yuǎn)不會改變。好了屑墨,現(xiàn)在我們可以給大家說躁锁,“現(xiàn)在讓我們移動到變更集1b03ab783b17!但如果我們能給這個變更集一個名字豈不是更好嗎卵史?”
是的战转,你可以這么做。這叫tag以躯。
我們現(xiàn)在來看看log:
注意到添加tag這個動作也形成了一個變更集槐秧,并且自動為我提交了。因此忧设,我現(xiàn)在可以使用Version-1.0來表示1b03ab783b17刁标。
接著開始開發(fā)Guac 2.0
提交:
“太咸了!”有顧客抱怨址晕。
這時我們可以用hg up命令回到Version-1.0版本
現(xiàn)在可以解決他的問題:
并且:
水銀告訴我膀懈,我又創(chuàng)造了一個新的頭。現(xiàn)在有兩個頭:2.0是我之前在上面工作的頭谨垃,1.1是我剛剛提交的頭启搂。
現(xiàn)在我可以把這個1.1版本給客戶,然后回到version 2.0開始工作刘陶。
現(xiàn)在只有一個問題……解決的太咸的問題沒有放在2.0版本上胳赌。這該如何解決?
啊哦匙隔。我必須要合并標(biāo)簽疑苫。這是水銀中的一個討厭的問題。這個問題就在于在水銀中,標(biāo)簽只是一個叫.hgtags的文件缀匕,并且也在版本控制的范圍內(nèi)纳决。因此,你需要時不時地手動合并一下.hgtags這個文件乡小。不管何時發(fā)生這個合并的動作阔加,你要做的很簡單……即總是保證每一行對應(yīng)到一個版本就行了。
剛剛所描述的是一種簡單的满钟,回到歷史版本胜榔,修改,再合并到當(dāng)前版本的一個方法湃番。而事實(shí)上在軟件工程中夭织,這樣的事幾乎隨時都在發(fā)生。因此吠撮,水銀提供了一個更加強(qiáng)健的方式來解決這一問題尊惰。
因此,我現(xiàn)在要撤銷1.0之后的所有工作泥兰,并且將倉庫返回到剛剛創(chuàng)建完1.0版本的時候弄屡。這樣,我就可以展示當(dāng)工作在一個未來的版本時鞋诗,如何修復(fù)客戶的問題膀捷。
想法是這樣的:我們將創(chuàng)立兩個倉庫,一個叫做stable削彬,而另一個叫做dev全庸。
叫做stable的倉庫裝著我們給客戶發(fā)布的最新的主版本。不論何時你需要修復(fù)一個緊急的bug融痛,你就在stable里面做壶笼。
dev倉庫用于下一個版本的開發(fā)。
當(dāng)1.0版本固定之后雁刷,就可以將stable克隆到dev中拌消。
現(xiàn)在我就有兩個相等的倉庫了。
由于一直到變更集14安券,這些倉庫的歷史都是一樣的。因此水銀會使用一個叫“硬鏈接”的技巧來避免在硬盤中存放兩個拷貝氓英。這使得hg clone操作非澈蠲悖快速而低耗,因而可以放心地在本地克隆許多倉庫铝阐。
現(xiàn)在我們開始在dev這個倉庫里面工作:
并且在stable倉庫中修改了鹽的問題:
將之標(biāo)簽為1.1
現(xiàn)在呢址貌,我們可以時不時地將stable中修改的問題拉到dev中:
這是我們現(xiàn)在做的:
如果你能理解上面的那張瘋狂的圖的話,那說明你水銀已經(jīng)掌握地不錯了。要點(diǎn)就在于练对,stable倉庫中只有bug的修復(fù)遍蟋,而dev倉庫中有新的代碼并且會將bug的修復(fù)合并進(jìn)去。
使用多個倉庫的情景還有一些:
- 你可以建立一個團(tuán)隊(duì)的倉庫螟凭,然后讓一些人在此基礎(chǔ)上開發(fā)一個新的功能虚青。當(dāng)它們結(jié)束工作,并且這個功能可以很好地運(yùn)行之后螺男,你可以將這個變更從團(tuán)隊(duì)倉庫推送到主開發(fā)倉庫棒厘,這時所有的人都能看到這個新功能。
- 你可以為測試人員建立一個QA的倉庫下隧,你可以把你需要測試的代碼放到QA的倉庫中去(而不是直接放到主倉庫中去)奢人。當(dāng)測試通過之后,你可以將QA倉庫里的東西推送到主開發(fā)倉庫中去淆院。通過這個方式何乎,主倉庫中的代碼總是測試過的。
- 由于每個開發(fā)人員都有它們自己的倉庫土辩,因而你可以從你的朋友那兒clone一份過來做實(shí)驗(yàn)支救。這樣就不會影響到整個團(tuán)隊(duì)。
在大而復(fù)雜的組織中脯燃,你可以自由結(jié)合這些技巧搂妻,從而創(chuàng)建一堆互相關(guān)聯(lián)的倉庫。每個功能都要經(jīng)歷測試和集成辕棚,它會被拉地越來越高直到最終你的新代碼可以被放到主倉庫中并且可以被客戶得到欲主。
自測
以下是你讀完這篇教程之后應(yīng)該能掌握的:
- 給版本打上版本號,并且能夠回到這個版本
- 用“stable”倉庫和“dev”倉庫來組織你的團(tuán)隊(duì)
好了逝嚎,本教程已經(jīng)到達(dá)尾聲了扁瓢。這個入門教程沒有覆蓋到水銀的方方面面,不過好在已經(jīng)有非常多的資源可以引領(lǐng)你更深入地了解水銀补君。這里推薦一本覆蓋面較為全面的書給大家引几。
譯者行之寫在最后:
有簡友問水銀與Git的區(qū)別。其實(shí)挽铁,兩者都是分布式版本控制系統(tǒng)伟桅。應(yīng)該說,大同小異而各有優(yōu)勢叽掘。不過楣铁,如果你是像我這么不Geek的程序員,懶得在命令行里面打命令的話更扁,可以試試水銀哦~總覺得Git是給人擺酷用的盖腕。要說簡單方便赫冬,還是水銀。
安裝水銀時可以直接安裝tortoisehg溃列。光從圖形界面的使用舒適感來說劲厌,TortoiseHg確實(shí)要比TortoiseGit要好用一些。TortoiseHg的Workbench還是相當(dāng)強(qiáng)大的听隐。
另外补鼻,水銀開web服務(wù)也特別方便。特別適合局域網(wǎng)內(nèi)的工作協(xié)同遵绰。
你可以讓任意一臺聯(lián)網(wǎng)的電腦在5秒鐘之內(nèi)開啟服務(wù)辽幌,這樣其他人就可以訪問這臺電腦上的倉庫啦。
可能有人會問椿访,既然TortoiseHg這么好用乌企,直接教怎么用TortoiseHg就好啦,干嗎給這么一堆命令行教程成玫?
然而我想說的是加酵,重要的是思想好嗎脖祈?這篇教程的重點(diǎn)在于用水銀希望的工作方式去思考毕源。知道了這,你覺得還需要專門學(xué)TortoiseHg怎么用嗎馏颂?
所以钦勘,這里就不展開介紹TortoiseHg了陋葡。只留下四個字,給大家點(diǎn)信心彻采。就是TortoiseHg特別好用腐缤!
最后,我想給自己留一條后路肛响。也就是想告訴大家岭粤,雖然我翻譯這教程有頂水銀損Git之嫌。但是特笋,我最近也確實(shí)在嘗試使用Git~畢竟人家有時候還是想裝一下Geek的:)