[version-control] 初學者的Mercurial:最終實用指南



Answers

您如何看待未提交的內容或當前代碼庫的狀態?

要查看已更改的文件列表,請執行以下操作:

$ hg status

這將打印每個已經被改變的文件及其狀態,其中可以包括:

  • M - 已修改。 該文件已更改,並且更改尚未提交。
  • A - 已添加。 該文件沒有被跟踪過,但如果你提交Mercurial將開始跟踪它。
  • R - 已刪除。 之前跟踪過該文件,但如果您提交了Mercurial將在此次和未來的提交中停止跟踪它。
  • ? - 未知。 該文件目前未被Mercurial跟踪。 除非您使用hg add添加它,否則提交將不會對其產生影響。
  • ! - 失踪。 該文件被跟踪,但Mercurial無法在工作副本中找到它。

要查看實際上對這些文件所做的更改,請執行以下操作:

$ hg diff
Question

初學者Git的啟發:明確的實踐指南

這是彙編了有關使用Mercurial進行實際使用的初學者的信息。

初學者 - 一個沒有很好地理解源代碼控制的程序員。

實用 - 涵蓋大多數用戶經常遇到的情況 - 創建存儲庫,分支,合併,從遠程存儲庫拉取/推送等等。

備註

  • 解釋如何完成某項工作,而不是如何實施。
  • 每個答案處理一個問題。
  • 盡可能清楚,盡可能簡潔地回答。
  • 編輯/擴展現有答案,而不是在同一主題上創建新答案。
  • 請為希望了解更多信息的人提供Mercurial wikiHG Book的鏈接。

問題:

安裝/設置

使用代碼

標記,分支,發布,基線

其他

其他Mercurial參考




你如何看待修改文件或存儲庫的歷史?

顯示整個存儲庫或文件的修訂歷史記錄

$ hg log {file(s)}

要么

$ hg history {file(s)}

並以相反的順序查看列表

$ hg log -r:



我如何與Subversion進行交互?

有三種方式:

convert擴展會將現有的Subversion存儲庫克隆到Mercurial存儲庫中。 它帶有Mercurial。 它的工作原理大致如下:

hg convert <Subversion URL or directory> <path to new Mercurial repository>

例如,這將抓取SixApart memcached存儲庫的主幹。

hg convert http://code.sixapart.com/svn/memcached/trunk

該擴展可以逐步將Subversion版本庫中的新版本引入Mercurial版本(有點像pull)。 但是它不支持將Mercurial修訂版本發回Subversion(不推送)。 [XXX:如果錯誤,請更正此問題]

hgsubversion擴展 。 它在很多方面都是最複雜的解決方案,因為它使用Subversion API與Subversion存儲庫進行通信。 它的目標是成為hg-svn橋。 它允許完整地修改版本(完全克隆,拉和推),但是在寫這篇文章時[XXX:修改這個如果/當它變得不正確時]它仍然在開發中,並且還沒有正式版本。 因此,它僅適用於最新的Mercurial(本文中為1.3)。

  • 它映射標籤和分支(在所有帶有tags/將其與等價命名的分支區分開來)。
  • 它維護一個特殊的分支closed-branches用於關閉Subversion中刪除的分支。
  • 要求 Subversion版本庫按照trunk / branches / tags的約定進行佈局。
  • 命令集通常是hg svn <subcommand>儘管它的目的是將你整合到不需要'svn'部分的地方(即,像其他任何Mercurial存儲庫一樣盡可能多地對待Subversion克隆)。 ;

它是這樣工作的:

克隆:

hg svnclone <Subversion URL> 

OR(僅適用於svn://網址)

hg clone <svn:// URL>

拉:

hg svn pull

推:

hg svn push

來電:

hg svn incoming

傳出:

hg svn outgoing

檢出整個存儲庫:

hg svnclone http://code.sixapart.com/svn/memcached

hgsvn實用程序( bitbucket樹 )。 直到最近這只允許你克隆和提取一個Subversion版本庫,但是從hgsvn 0.1.7它支持push。 [我不知道它推動得有多 。 任何具有更多經驗的人都應該更新它。]它具有以下顯著特點:

  • 它為每個SVN標籤生成一個Mercurial標籤。
  • 它在每個變更集上放置一個本地標籤來標記其SVN修訂版。
  • 它將每個Mercurial修訂放在一個以其SVN分支命名的命名分支上。 例如branches/some-feature就像hg branch some-feature 。 它將乾線放在trunk (即,除非用戶明確切換到它,否則Mercurial默認分支上沒有任何干擾。)
  • 它會嘗試識別分支和標籤,並創建它們,但如果它不能,則只需跳過它們。 當Subversion版本庫不遵循傳統的trunk / branches / tags佈局時,這很方便。

它是這樣工作的:

克隆:

hgimportsvn <Subversion URL>

拉:

hgpullsvn

推:

hgpushsvn

來電:

hgpullsvn -n

傳出:

hgpushsvn -n

檢出整個存儲庫:

hgimportsvn http://code.sixapart.com/svn/memcached

只檢查幹線:

hgimportsvn http://code.sixapart.com/svn/memcached/trunk



你如何回到以前版本的代碼?

這個問題

$ hg update [-r REV]

@van:如果以後你提交了,你將有效地創建一個新的分支。 然後,您可能只會繼續在此分支上工作,或者最終將現有分析合併到該分支中。




你如何查看代碼?

hg clone [OPTION]... SOURCE [DEST]

在哪裡可以選擇:

 -U --noupdate      the clone will only contain a repository (no working copy)
 -r --rev           a changeset you would like to have after cloning
    --pull          use pull protocol to copy metadata
    --uncompressed  use uncompressed transfer (fast over LAN)
 -e --ssh           specify ssh command to use
    --remotecmd     specify hg command to run on the remote side

源是位於存儲庫中的原始文件的來源,它可以是遠程URL或文件系統目錄。 例如:

目標是源代碼將位於本地文件系統中的位置。




如何在推送時看到將向上游存儲庫發送的更改?

使用hg outgoing來獲取將設置為默認存儲庫的變更集列表:

$ hg outgoing

要獲得實際的代碼更改,請使用-p (-- --patch )。 這將完整輸出每個變更集:

$ hg outgoing -p



如何為特定文件集“標記”“標記”或“釋放”特定修訂集,以便以後隨時可以拉取該修訂版?

$ hg tag my-tag

您還可以克隆存儲庫以創建特殊的標籤存儲庫。

$ hg clone working-repository my-tag-repository



Mercurial的良好GUI / IDE插件?

GUI

  • TortoiseHg幾乎適用於任何操作系統。 包括Windows Explorer集成。 它也適用於Linux和一些其他操作系統:包括Max OS X.它有一個笨重的界面,起初使用起來有點不方便,但它非常完整和強大。
  • Murky在Mac OS X 10.5或更高版本上運行。 Murky非常適合探索存儲庫和基本命令,但您還需要知道如何使用命令行。
  • MacHg是一個不錯的Mac OS X Gui,它比MacHg具有更多的功能和優化,但您仍然需要命令行。
  • SourceTree是一個Mac客戶端,最近剛推出了Windows版本。 漂亮的UI(至少在OS X上)支持大部分Hg功能,包括擱置。

插件




你如何從特定的變更集中提取補丁?

$ hg export -o patchfile changeset

然後您可以使用以下命令將其導入另一個分支:

$ hg import patchfile



如何設置Mercurial?

Mercurial將其配置信息存儲在* nix系統上的~/.hgrc以及Windows系統上的%UserProfile%\mercurial.ini中。 (在Windows 2000或Windows XP系統上, %UserProfile%通常為"C:\Documents and Settings\[username]\" ,在Windows Vista和Windows 7系統上通常為C:\Users\[username]\ )。

作為一個起點,您應該通過在.hgrcmercurial.ini放置以下內容來設置您的Mercurial用戶名:

# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <email.address@example.net>

Windows系統上的TortoiseHg用戶也可以運行hgtk userconfig

另請參閱“ Mercurial:權威指南第2章中的創建Mercurial配置文件 ”。




如何安裝Mercurial?

如果您是從Linux上的源代碼安裝的,或者使用Windows安裝程序,請進行良好的編輯。

Mac OS X 10.4(Tiger),10.5(Leopard)

使用Python的easy_install(使用Setuptools ):

sudo easy_install mercurial

這可以找到最新版本(在撰寫本文時為1.3.1)並安裝在:

/Library/Frameworks/Python.framework/Versions/2.6/bin/

使用Python 2.6時,它也會繞過Mercurial OS X安裝程序包 (截至2009年7月26日的1.2.1),抱怨它需要Python 2.5。 從文檔看來,Fink和Macports安裝了1.2版本。

Linux的

大多數顯式Linux軟件包似乎落後於當前版本,因此請使用easy_install (如上所述)或下載Mercurial tarball ,提取歸檔文件,切換到mercurial目錄,然後運行:

$ make
$ sudo make install    # do a system-wide install
$ hg debuginstall      # sanity check
$ hg                   # see help

(來自推出Mercurial,一個分佈式版本控制系統

視窗

有一個最新版本的Mercurial二進制包TortoiseHg是用於並安裝Mercurial的Windows外殼擴展。 Cygwin也可以安裝Mercurial。

或者(指令太冗長了,所以鏈接到這裡),您可以從源代碼構建 Mercurial 的優化純Python版本。






Links