分布式版本控制工具Mercurial------Linux下hg命令的使用


1.關於hg命令選項:

每一個每一個命令選項都有一個長的名稱,如hg log 命令會使用 –rev選項;

大多數選項擁有一個短的名稱,如—rev有一個-r的短名;

長名稱以兩條橫線(–)作為起始,短名起始是一條橫線(-)。如—rev、-r;

無論是長名還是短名,其用途是一致的。如-r和—rev 其后都跟一個變更集合的ID或版本號;

如果使用的是短名,多個名稱可以連在一起運行。如hg log –v –r –p 2可以寫作hg log –vpr 2

2.hg log 命令:

使用該命令可以了解代碼倉庫變更的歷史,其輸出的結果中包含以下幾個字段

(1)changeset 該字段被一個分號(:)分成兩部分,分號的前面是一個數字,其后是一個十六進制的字符串。在查看版本歷史的時候,常常會用到前面得數字。這里需要注意的是,該數字所代表的變更集合不是唯一的(比如a,b,c在一個代碼倉庫中的順序是0,1,2,在另外一個代碼倉庫中可能是0,2,1)。真正指向唯一的變更集合的是后面的十六進制的字符串。

(2)user 代表集合的創建者;

(3)date 代表集合創建的時間;

(4)summary 創建者提供的關於該集合的描述文本;

(5)tag 有一些集合會包含一個tag字段,這個特別的字段總是指向代碼倉庫中最新的版本。

eg:

changeset: 16:0dc476d6fac3
tag: tip
user: Huanbiao Chen <hchen@example.com>
date: Thu Apr 19 13:53:35 2018 +0800
summary: revise demo strategy

如果想要查看特定的版本,在hg log 后跟上版本號即可,如:

查看特定的版本:hg log -r 2

同時查看2,3,4幾個版本:hg log -r 2:4

查看版本的詳細內容:hg log -vpr 1 
3.使用hg commit 提交代碼需要注意的問題

第一次使用hg commit命令提交代碼時,很可能會出現代碼無法提交的問題。這是因為在代碼提交時hg會嘗試去找到一個有效的用戶名。它會按下面的順序去逐個嘗試尋找有效的用戶名:

(1)如果在使用hg conmit提交代碼時,使用-u命令選項,並在其后跟上一個用戶名(如:dexibe@gmail.com)。此時,該命令將具有最高的優先權;
(2)如果沒有第一步的命令選項,它會查看你是否設置了HGUSER環境變量;
(3)如果在你的home目錄下,你創建了.hgrc文件,並且該文件設置了username,它會啟用該用戶名;
(4)到這一步,它會查看你的email環境變量;
(5)如果以上都沒有找到合適的用戶信息,hg 將查看你的系統尋找用戶名和主機名稱,並試圖根據這些組件構建有效的用戶名,通常情況下用戶名是不可用的,只會呈現一段警示語句;

4.拉取和推送代碼

拉取代碼,使用hg pull即可,有一個hg incoming命令我很少用到,仔細看了看,這個命令還是很管用。hg incoming命令不會真正的拉取代碼到本地倉庫,它只是告訴你使用hg pull會將哪些變更集合拉至本地倉庫。這對於你拉取特定的版本集合很管用。
推送代碼,使用hg push即可。在真正推送之前,可以使用hg outgoing查看有哪些改變將會被推送至代碼倉庫。

5.讓 hg 跟蹤你的文件

hg不會自動的管理你倉庫中文件,hg status命令會告訴你那些它不知道的文件,它會在這些文件的前面打上一個“?”號。假如在你的倉庫中有一個myfile.txt的文件,執行hg status(簡寫 hg st)你會看到在myfile.txt前面,我們會看到一個“?”號。如要讓hg管理該文件,執行如下命令:hg add myfile.txt

此時運行hg st,你會看到文件myfile.txt前面的“?”號變成了“A”。執行hg commit命令之后,myfile.txt就不會再出現在hg status的輸出結果之中。hg status命令的輸出結果中僅包含刪除的(removed)、被修改的(modified)、重命名的(renamed)文件。添加一個文件,hg什么也不會做,它只是在執行下一次提交(hg commit)之前對該文件“拍一張快照”。

注意事項:

如果使用hg add后跟的是一個目錄,該命令會將該目錄下的所有文件添加到倉庫之中,包括子目錄中的文件。假如有一個目錄b,其下有一個文件some.txt和d目錄,d目錄之下有一個文件c.txt。

hg並不追蹤文件夾信息,而是追蹤文件的路徑。在創建一個文件之前,首先創建文件所在的路徑。刪除一個文件后,它會刪除文件所在路徑的所有空的文件夾。一般情況下,很少用到空文件夾。如果在你的代碼倉庫中需要空文件夾,可以通過hg add來添加一個隱藏的文件。在linux系統中,任何以“.”開頭的文件都被視作隱藏文件。除此之外,你可以在需要它之前通過自動化執行腳本方式創建空文件夾。

6.復制文件

hg提供了hg copy命令來復制一個文件。用該命令來復制文件,hg會記住新的的文件是源文件的副本。在你合並代碼的時候,它會對其作特殊的處理。hg status -C 可以看到myfile-copy.txt是從myfile.txt復制而來。

hg copy命令與unix系統中的cp命令極其相似,只需要提供兩個或三個以上的參數即可,最后的一個參數被視作目的地,其它都被視作復制源。這種操作包括以下幾種情況:
目的地不存在,源文件為單個文件,將創建同名的新文件;如:
(1)hg copy a k//目錄k不存在,重建k目錄,並將a復制到k文件夾之下
目的地是一個目錄,將源文件復制到該目錄之下;如:
(2)hg copy a b d// 將a 和b 復制到d目錄之下
復制源跟目的地都是目錄,則將復制源復制到目標文件夾之下,並在目標文件夾之下根據復制源目錄的名稱重建目錄,且保持復制源的目錄樹結構;如:
(3)hg copy z d //假設z的目錄樹結構為z/a/c,復制到目錄d后,d的目錄樹結構為d/z/a/c
復制源是一個目錄,目的地不存在,則創建新的目錄,並將復制源下的目錄樹復制到新的目錄之下;如:
(4)hg copy z e//假設z的目錄結構為z/a/c,復制完成后e的目錄結構為e/a/c
與hg remove命令一樣,如果你手動復制一個文件,並讓hg能跟蹤此文件,可以使用hg copy –after [源文件] [目標文件],如:
(5)cp a b
(6)hg copy --after a b

7.hg diff

hg diff有一個選項–Git或者-g,該選項我們很少用到。假如你修改了一個文件的權限,運行hg status會看到文件被修改,而運行hg diff將看不到任何輸出結果。如果在hg diff后跟上-g選項,你將會看到文件的實際狀態。在unix系統下運行以下代碼,看看輸出結果。
(1)chmod +x a
(2)hg diff -g

總結:目前實習階段學到的使用內容

hg commit 提交,並且可在字符界面添加描述內容

hg log -G | less :查看版本詳情

hg diff -c 15 | less -R :查看變更歷史

hg diff -c 15 --git -U 999999 > 15.diff :將變更內容重定向為diff文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM