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

Ground Up Mercuial

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

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

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

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

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

多個(gè)copy版本

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

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

用命令行使用水銀

僅僅輸入hg,你會(huì)得到一個(gè)常用命令的列表。你也可以輸入hg help來獲得一份更為詳盡的列表。

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

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

進(jìn)入頂層目錄

……,然后輸入hg init

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

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

多了一個(gè).hg目錄

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

好了,我們現(xiàn)在有了一個(gè)新的倉庫。我們想要把一些源代碼添加進(jìn)去。很簡(jiǎn)單,輸入hg add

添加文件

還需要一個(gè)步驟…你需要提交變更。什么變更?變更就是:你添加了那么多的文件。

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

提交變更

水銀會(huì)彈出一個(gè)編輯器,從而你可以輸入一些提交信息。這些信息只是為了提醒你自己,這次提交作了哪些改變。

記錄變更

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

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

查看歷史變更

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

變更一個(gè)文件

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

提交變更

看,水銀能夠知道只有一個(gè)文件,a.txt被改變了:

顯示變更

提交過后,我們?cè)賮砜纯磍og:

此時(shí)的log

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

再來一次變更:

再次變更一個(gè)文件

提交:

提交變更

提交信息:

提交信息

現(xiàn)在的log:

現(xiàn)在的log

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

我知道你在想些什么。你在想,“JOEL, 這簡(jiǎn)直在浪費(fèi)時(shí)間!”為什么一個(gè)提交講這么久!真是懶婆娘的裹腳布!

請(qǐng)耐心一點(diǎn),年輕人!你馬上就會(huì)學(xué)到如何從提交中得到好處。

首先,比如說你在編輯的時(shí)候犯了點(diǎn)錯(cuò)。

文件編輯出錯(cuò)了

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

又誤刪了一些文件

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

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

水銀來幫你恢復(fù)

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

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

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

(我知道,我一會(huì)兒用Windows的CMD界面,一會(huì)兒又用GOTO語句,一定會(huì)招來你們的不滿與吐槽。)

隨著時(shí)間的流逝,你可能不記得每個(gè)版本都具體做過哪些變化。不過不要緊,水銀替你跟蹤了。你只需要輸入hg status,水銀就會(huì)給你顯示你改變過的文件。

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

顯示改變過的文件

hg status將你改變的任何一個(gè)文件都顯示出來。“M”表示“更改”——文件被修改過了。“!”表示丟失——文件本來應(yīng)該在的,可現(xiàn)在卻沒了。“?”表示不知道——水銀對(duì)那個(gè)文件現(xiàn)在還一無所知。

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

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

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

現(xiàn)在來看那個(gè)遺失的文件,favicon.ico。像之前說的那樣,如果你并不想刪除它,則可以使用hg revert;如果你真的要?jiǎng)h除它的話,你需要告訴水銀:

刪除文件

“R”表示“Removed”。因此下次commit的時(shí)候,這個(gè)文件將被刪除。最后,我們需要加上新的文件,b.txt

添加文件

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

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

提交變更

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

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

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

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

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

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

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

查看兩個(gè)版本間的差異

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

到達(dá)指定的版本

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

自測(cè)

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

  1. 創(chuàng)建一個(gè)倉庫
  2. 在倉庫中添加或刪除文件
  3. 當(dāng)做了變更,看看有哪些沒有提交的變更,然后
  4. 如果你覺得這些變更還不錯(cuò),就commit
  5. 如果你覺得這些變更不行,就revert。
  6. 查看文件的舊版本,并讓自己的工作目錄可以update成任何一個(gè)版本。
最后編輯于
?著作權(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)容