mercurial開始使用mercurial


備註

Mercurial是一個現代的開源分佈式版本控制系統。您可能聽說過git,這在今天更受歡迎; git和Mercurial具有很強的可比性,並提供大多數類似的功能。

開發人員使用Mercurial來跟踪其應用程序源代碼的更改。它可用於跟踪任何文件目錄的更改,但是,與大多數源控制系統一樣,當這些文件是文本文件(而不是二進製文件)時,它最有效。 Mercurial還允許多個開發人員同時處理同一個源代碼目錄,並管理跟踪每個開發人員的更改然後合併這些更改的過程。

版本

Mercurial遵循基於時間的發布計劃,並在2月,5月,8月和11月每三個月發布一次主要版本。每個剩餘的月份都會發布一個次要版本。請注意,Mercurial不使用sematic版本控制,因此2.9.2(2.9版本中的最後一個)與3.0之間沒有顯著差異。

向後兼容性是Mercurial的關鍵要求,因此根據需要簡單升級Mercurial安裝通常是安全的。但是,至少每三個月執行一次這是一個好主意,因為某些功能可能會使舊客戶端無法在較新的存儲庫上運行。

項目發布說明詳細說明了版本之間的變化,而升級說明則提供了用戶在升級時需要注意的內容的明確指導。

一系列值得注意的版本:

筆記日期
3.5 刪除對Python 2.4和2.5的支持 2015年7月31日
2.1 引入變更集“階段”,實現安全的歷史記錄修改 2012-02-01
1.9 推出Command Server API以支持更好的應用程序集成 2011-07-01
1.7 新的存儲庫格式支持不常見的文件名 2010-11-01

分枝

當我們第一次開始工作時,我們必須決定這是否是我們正在處理的獨立工作領域,還是現有工作的一部分。如果它存在,我們可以在該分支機構工作。如果它是新的,我們將開始一個新的分支。

我們的工作流程是:

  • hg branch MyNewFeature
  • 工作工作工作
  • hg commit -m "committing my changes"
  • 工作工作工作
  • hg commit -m "more changes"

此時,我們希望將我們的工作推向遠程服務器。但在推送更改之前(如果它是您之前沒有推過的新分支,請忽略它),我們需要檢查此分支是否有任何傳入更改。我們可以查看:

hg incoming -b .
 

如果我們的分支上有任何傳入的變更集,我們需要拉動並將我們的更改重新綁定到變更列表的頂部。

hg pull -b . --rebase
 

完成此操作後,或者如果沒有傳入的變更集,我們可以繼續推送。

我們只想推動我們當前的工作,而不是我們所做過的一切。我真的從不推動我的整個存儲庫,而是我目前的工作。理由是推送整個存儲庫假設我正在集成多個工作線。但我只想整合我目前的工作,我只希望一次只能在一行中工作。

如果這是我第一次推動這個分支:

hg push -b . --new-branch
 

如果我已經推動了這個分支:

hg push -b .
 

“-b。”命令意味著只需按下當前分支,而不是其他任何東西。

要在工作分支之間切換

hg update myBranchName
 

入門

另請參閱Mercurial教程

創建Mercurial存儲庫

Mercurial存儲庫只是一個目錄(稱為“工作目錄”),其中包含一個.hg 目錄,其中包含有關存儲庫內容的元數據。這使得Mercurial非常輕巧,易於使用。要創建新存儲庫,只需運行:

$ hg init project
 

其中project 是您要創建的目錄的名稱。這將創建一個project 目錄以及包含存儲庫本身的project/.hg 目錄。

   $ cd project
   $ echo Hello World > hello.txt
   $ hg stat
   ? hello.txt
 

我們剛剛在存儲庫中創建了一個hello.txt 文件並運行了hg status (或簡稱stat )來查看我們的存儲庫的當前狀態。正如你所看到的, hello.txt 是用? 註釋的? ,意思是Mercurial還沒有意識到這一點。 add 命令使用Mercurial註冊這個新文件,因此它將包含在下一次提交中。

$ hg add hello.txt
 

現在Mercurial知道一個已更改的文件,你可以運行diff 來查看自上次提交以來發生的變化 - 在這種情況下,我們將添加hello.txt 的全部內容:

$ hg diff
diff -r 000000000000 hello.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.txt Sat Jul 23 01:38:44 2016 -0400
@@ -0,0 +1,1 @@
+Hello
 

一旦我們對他們滿意並準備檢查我們的更改,我們就可以運行commit

$ hg commit -m "Created a hello world file."
 

請注意,我們在-m 包含了提交消息 - 如果未指定-m Mercurial將啟動文本編輯器,您可以輸入提交消息。如果您想提供更長的多行消息,這將非常有用。

一旦您提交了更改,如果您運行hg stat 它們將不再顯示,因為存儲庫現在與工作目錄的內容同步。您可以運行log 以查看提交列表, -v 包含其他詳細信息,例如每個提交觸及的文件:

$ hg log -v
changeset:   0:b4c06cc77a42
tag:         tip
user:        Michael Diamond@Aodh <dimo414@gmail.com>
date:        Sat Jul 23 01:44:23 2016 -0400
files:       hello.txt
description:
Created a hello world file.
 

安裝和設置

您可以從項目的網站下載Mercurial ,如果您更喜歡使用命令行界面,還可以使用Windows,Linux和OSX的圖形工具 。大多數Unix包管理器包括Mercurial,例如在Debian / Ubuntu上:

$ apt-get install mercurial
 

您可以通過運行以下命令來驗證Mercurial的安裝:

$ hg --version
 

建立

Mercurial開箱即用,但您可能希望在進一步開發之前配置Mercurial以了解您的身份。要將用戶名與您的提交相關聯,請編輯~/.hgrc (或Windows上的主目錄中的mercurial.ini )並添加以下行:

[ui]
username = Your Name <your@email.address>
 

如果您不想這樣做,您可以在提交-u 標誌時始終指定用戶名,例如:

$ hg commit -u "Your Name <your@email.address>"
 

推拉

Mercurial可以輕鬆分享您的工作,並從其他開發人員那裡獲取捐款。這涉及三個關鍵步驟; 克隆拉動推動

克隆

要將遠程存儲庫複製到本地磁盤,請“克隆”它。為此,只需傳遞您要克隆的遠程URL即可。要克隆Mercurial源代碼,只需運行:

$ hg clone https://selenic.com/hg
 

這將創建一個本地hg 目錄,其中包含您可以構建,編輯和提交的Mercurial存儲庫的副本(儘管您無法將提交發布回父存儲庫)。

一旦您檢出了存儲庫,您就會希望在其他人發布更改時保持同步。您只需運行以下命令即可下拉新的更改:

$ hg pull
 

這會引入新的提交,但不會更新您的工作目錄,因此您不會立即看到任何更改。要更新工作目錄的內容,請運行:

$ hg up
 

這會將您的工作目錄更新為存儲庫中的tip(最新)版本。

你也可以運行:

$ hg pull -u
 

引入新更改並一步更新工作目錄。

假設您具有對遠程存儲庫的寫訪問權限,您可以使用以下方法將您在本地進行的任何提交發佈到遠程存儲庫:

$ hg push
 

只要自上次提取以來沒有任何其他提交,就會上傳您的更改。如果您的push 被拒絕,因為它會“創建額外的頭”,這意味著您需要引入這些新更改並將它們與您自己的更改合併。

$ hg pull
$ hg merge  # this creates a new changeset merging your changes with the remote changes
$ hg commit -m "Merged in remote changes"
$ hg push
 

大多數情況下,這是您需要做的所有事情,因為Mercurial會自動處理合併您的更改,但有時您需要手動解決合併衝突(請參閱合併主題)。如果需要,您可以隨時取消合併並返回到干淨的工作目錄:

$ hg up -c
 

但請記住,這是一種破壞性的操作;工作目錄中的任何更改都將被刪除。