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

Ground Up Mercuial

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

即使你只是一個人在戰(zhàn)斗琉雳,你也應(yīng)當(dāng)使用水銀來得到版本控制的諸多好處。此教程會展示將一個文件夾交由水銀管理是多么地容易有决,你可以因此而方便地跟蹤軟件的舊版本秧秉。

水銀是一個版本控制系統(tǒng)。開發(fā)者用它來管理源代碼针肥。用它的目的主要有兩個:

  1. 它跟蹤舊版本的每一個文件饼记。
  2. 它可以合并不同版本的代碼。因而團(tuán)隊(duì)成員可以各自獨(dú)立地工作慰枕,然后把他們所作出的改變合并到一起具则。

如果沒有水銀,你可能需要復(fù)制一大堆文件夾來保存你的舊版本:

多個copy版本

這樣做會占據(jù)很多磁盤空間具帮,并且過段時間你就搞不清楚哪個是哪個了博肋。使用版本控制器可以很好地解決這個問題。

大多數(shù)人使用命令行來管理水銀匕坯,它在Windows, Unix和Mac平臺上都適用束昵。水銀的命令為hg:

用命令行使用水銀

僅僅輸入hg,你會得到一個常用命令的列表葛峻。你也可以輸入hg help來獲得一份更為詳盡的列表锹雏。

為了使用版本控制,你需要一個repository(倉庫)术奖。倉庫里保存了你所有文件的歷史版本礁遵。為了節(jié)約硬盤空間轻绞,它并沒有真的去保存每一個歷史版本——它只是保存了版本之間的差異。

在以前佣耐,建一個倉庫是一件大事政勃。你需要一個中央服務(wù)器,并且在上面裝軟件兼砖。然而水銀是分布式的奸远,你不需要建什么中央服務(wù)器。你完全可以就在個人計(jì)算機(jī)上使用它讽挟。而且建一個倉庫超級容易:你只需要進(jìn)入代碼的頂層目錄……

進(jìn)入頂層目錄

……懒叛,然后輸入hg init

創(chuàng)建一個水銀的倉庫

等等,好像什么事也沒有發(fā)生耽梅?然而薛窥,如果仔細(xì)瞧一瞧,你會發(fā)現(xiàn)多了一個叫.hg的新目錄:

多了一個.hg目錄

那就是倉庫眼姐!那是一個裝滿著水銀所需的所有文件的目錄诅迷。里面有一些設(shè)置,有文件的歷史版本众旗,有標(biāo)簽tags罢杉,還有備份,等等逝钥。記住這句忠告吧:不要修改里面的任何東西屑那。你也不需要與這個文件夾直接打交道。

好了艘款,我們現(xiàn)在有了一個新的倉庫持际。我們想要把一些源代碼添加進(jìn)去。很簡單哗咆,輸入hg add蜘欲。

添加文件

還需要一個步驟…你需要提交變更。什么變更晌柬?變更就是:你添加了那么多的文件姥份。

你為什么需要提交?用水銀的時候年碘,提交就好比是說:“嘿澈歉,請你記住現(xiàn)在這樣的文檔布局和內(nèi)容∮煨疲”這就好像是拷貝了一下整個文件夾…每一次你改變了一些內(nèi)容埃难,你就可以commit一下。

提交變更

水銀會彈出一個編輯器,從而你可以輸入一些提交信息涡尘。這些信息只是為了提醒你自己忍弛,這次提交作了哪些改變。

記錄變更

當(dāng)你保存并退出考抄,你的文件就被提交了细疚。

你可以輸入hg log來看一看歷史變更。這就像你的倉庫的部落格川梅。

查看歷史變更

現(xiàn)在不如再來編輯一個文件疯兼,看看會發(fā)生什么。

變更一個文件

現(xiàn)在我們又作了另外一個變更挑势,我們可以用hg commit來提交镇防。

提交變更

看,水銀能夠知道只有一個文件潮饱,a.txt被改變了:

顯示變更

提交過后,我們再來看看log:

此時的log

就像任何現(xiàn)代的部落格一樣诫给,水銀把最新的事件放在最上面香拉。

再來一次變更:

再次變更一個文件

提交:

提交變更

提交信息:

提交信息

現(xiàn)在的log:

現(xiàn)在的log

OK。到現(xiàn)在為之中狂,我做了一些變更凫碌。而且每當(dāng)我作出一個重要的變更之后,我都會把它提交到倉庫中去胃榕。

我知道你在想些什么盛险。你在想,“JOEL, 這簡直在浪費(fèi)時間勋又!”為什么一個提交講這么久苦掘!真是懶婆娘的裹腳布!

請耐心一點(diǎn)楔壤,年輕人鹤啡!你馬上就會學(xué)到如何從提交中得到好處。

首先蹲嚣,比如說你在編輯的時候犯了點(diǎn)錯递瑰。

文件編輯出錯了

然后,天吶隙畜,你刪了一些非常重要的文件抖部。

又誤刪了一些文件

【此處有原作者的小故事。因與主題關(guān)系不大议惰,略過……】

感謝水銀慎颗,當(dāng)你對自己的改變不滿時,你可以輸入hg revert。水銀會把你的目錄里的所有東西恢復(fù)到最后一次提交時的樣子哗总。

水銀來幫你恢復(fù)

之所以使用參數(shù)--all是因?yàn)橄胍阉械奈募蓟貪L到它們的初始狀態(tài)上几颜。

因此,當(dāng)你使用水銀管理你的源代碼時讯屈,你可以:

  1. 做一些變更
  2. 看它們是否正確有效
  3. 如果是蛋哭,則commit它們
  4. 如果不是,則revert它們
  5. GOTO 1

(我知道涮母,我一會兒用Windows的CMD界面谆趾,一會兒又用GOTO語句,一定會招來你們的不滿與吐槽叛本。)

隨著時間的流逝沪蓬,你可能不記得每個版本都具體做過哪些變化。不過不要緊来候,水銀替你跟蹤了跷叉。你只需要輸入hg status,水銀就會給你顯示你改變過的文件营搅。

假設(shè)我首先創(chuàng)建了一個文件云挟,然后編輯了一個文件,最后刪除了一個文件转质。

顯示改變過的文件

hg status將你改變的任何一個文件都顯示出來园欣。“M”表示“更改”——文件被修改過了休蟹》锌荩“!”表示丟失——文件本來應(yīng)該在的赂弓,可現(xiàn)在卻沒了绑榴。“拣展?”表示不知道——水銀對那個文件現(xiàn)在還一無所知彭沼。

我們一個一個來看。那個更改了的文件备埃,a.txt姓惑。更改了什么?你可能已經(jīng)忘了按脚。有一個命令可以幫助你:hg diff于毙。它會告訴你從上一次的提交到現(xiàn)在,文件作了哪些變化辅搬。

跟上一次提交相比當(dāng)前的變化

這種格式似乎有一點(diǎn)神秘唯沮,但最讓人感興趣的部分是:如果那塊看到一些行前面有一個減號脖旱,表示它們被刪除了;一些行前面有一個加號介蛉,則表明這些行被添加了萌庆。所以上面的例子中,“Normal people”被編輯成了“Civilians”币旧。

現(xiàn)在來看那個遺失的文件践险,favicon.ico。像之前說的那樣吹菱,如果你并不想刪除它巍虫,則可以使用hg revert;如果你真的要刪除它的話鳍刷,你需要告訴水銀:

刪除文件

“R”表示“Removed”占遥。因此下次commit的時候,這個文件將被刪除输瓜。最后瓦胎,我們需要加上新的文件,b.txt

添加文件

“A”表示“Added尤揣×菽螅”你有沒有發(fā)現(xiàn)我已經(jīng)懶得把hg status打全了?水銀只需要足夠多的可以區(qū)分的字母芹缔。而以st打頭的也只有這一條命令而已。

把所有的瓶盛?和最欠!都解決了之后,就可以繼續(xù)commit了惩猫。

提交變更

關(guān)于hg log還有一件事:變更集(changeset)那一行顯示了一個數(shù)字……實(shí)際上是兩個數(shù)字芝硬。一個簡單的,比如“0”來表示最初的版本轧房。還有一串長的拌阴,十六進(jìn)制的數(shù)字你可以暫時忽略。

記住奶镶,水銀保存了足夠的信息迟赃,可以來重構(gòu)任何一個歷史版本。

首先厂镇,一個簡單的命令hg cat可以被用來打印某個文件的任何歷史版本纤壁。
例如,我們可以看看a.txt現(xiàn)在長什么樣子捺信。

查看文件當(dāng)前的內(nèi)容

如果想看它過去的樣子酌媒,可以加一個-r("revision")參數(shù):

查看文件在某個版本時的內(nèi)容

如果文件很長,很復(fù)雜,并且其實(shí)至改變了一點(diǎn)點(diǎn)秒咨。那我們可以使用hg diff帶上-r參數(shù)來查看兩個版本之間的差異在什么地方喇辽。

查看兩個版本間的差異

最后,在你快達(dá)到你看一篇文章的身體極限之前雨席,我還想告訴你一件小事:你可以使用hg update這個命令來到達(dá)你想要的任何一個版本菩咨。

到達(dá)指定的版本

如果不帶任何參數(shù),則hg update會更新到最新的版本舅世。

自測

OK旦委! 此為教程1。下面是你應(yīng)當(dāng)已經(jīng)掌握的知識:

  1. 創(chuàng)建一個倉庫
  2. 在倉庫中添加或刪除文件
  3. 當(dāng)做了變更雏亚,看看有哪些沒有提交的變更缨硝,然后
  4. 如果你覺得這些變更還不錯,就commit罢低,
  5. 如果你覺得這些變更不行查辩,就revert
  6. 查看文件的舊版本网持,并讓自己的工作目錄可以update成任何一個版本宜岛。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市功舀,隨后出現(xiàn)的幾起案子萍倡,更是在濱河造成了極大的恐慌,老刑警劉巖辟汰,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件列敲,死亡現(xiàn)場離奇詭異,居然都是意外死亡帖汞,警方通過查閱死者的電腦和手機(jī)戴而,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翩蘸,“玉大人所意,你說我怎么就攤上這事〈呤祝” “怎么了扶踊?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翅帜。 經(jīng)常有香客問我姻檀,道長,這世上最難降的妖魔是什么涝滴? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任绣版,我火速辦了婚禮胶台,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杂抽。我一直安慰自己诈唬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布缩麸。 她就那樣靜靜地躺著铸磅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杭朱。 梳的紋絲不亂的頭發(fā)上阅仔,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音弧械,去河邊找鬼八酒。 笑死,一個胖子當(dāng)著我的面吹牛刃唐,可吹牛的內(nèi)容都是我干的羞迷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼画饥,長吁一口氣:“原來是場噩夢啊……” “哼衔瓮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抖甘,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤热鞍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衔彻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍现,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年米奸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽篷。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡悴晰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逐工,到底是詐尸還是另有隱情铡溪,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布泪喊,位于F島的核電站棕硫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袒啼。R本人自食惡果不足惜哈扮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一纬纪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滑肉,春花似錦包各、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至六荒,卻和暖如春护姆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掏击。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工卵皂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铐料。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓渐裂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钠惩。 傳聞我的和親對象是個殘疾皇子柒凉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容