version-control mercurial教學 - 初學者的Mercurial:最終實用指南




git比較 mercurial中文 (19)

如何從存儲庫中刪除文件?

從存儲庫中刪除文件,並在下次提交時刪除它:

$ hg remove {file(s)}

從存儲庫中刪除文件,但不刪除它

$ hg remove -Af {file(s)}

或來自Mercurial 1.3

$ hg forget {file(s)}

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

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

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

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

備註

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

問題:

安裝/設置

使用代碼

標記,分支,發布,基線

其他

其他Mercurial參考


你如何查看代碼?

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 init my-repository

你如何將一個分支的部分合併到另一個分支?

在.hg / hgrc中啟用“移植”擴展

[extensions]
transplant=

加載目標分支,然後移植目標修訂。
例如:從分支'foo'櫻桃挑選修訂81到當前分支

$ hg transplant -b foo 81

你如何提交更改?

$ hg commit -m "Commit message"

你如何分支?

$ hg分支我的分支

要么

$ hg clone original-repository my-branch

儘管應該注意到, 分支創建了一個“虛擬”目錄(即文件保持不變,但hg將它們視為在系統內部不同),而克隆會創建實際的完整副本。 嚴格來說, 克隆不是分支。


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

$ hg tag my-tag

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

$ hg clone working-repository my-tag-repository

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

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

$ hg log {file(s)}

要么

$ hg history {file(s)}

並以相反的順序查看列表

$ hg log -r:

你如何回复Changeset?

有幾個選項可用

簡單方法(退出單個更改集)

$ hg backout -m 'back out second change' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change

硬道(手動差異和應用)

步驟1 :創建一個修補程序文件以恢復在修訂版107和108之間更改的內容:

hg diff -r107 -r108 --reverse  > revert-change.patch

(或者,沒有反向的hg diff -r108 -r107會做同樣的事情)

第2步 :應用修補程序文件:

patch -p1 < revert-change.patch

有些差異可能無法應用,例如:

Hunk #3 FAILED at 517.
1 out of 3 hunks FAILED -- saving rejects to file 'foo/bar.c.rej'

.rej文件將包含未能應用的diff的內容,您需要查看一下。


你如何提交更改?

從當前的本地* mercurial存儲庫調用此命令

hg commit [OPTION]... [FILE]...

別名:ci

  • 本地mercurial存儲庫在當前目錄中具有.hg

在哪裡可以選擇:

 -A --addremove     mark new/missing files as added/removed before committing
    --close-branch  mark a branch as closed, hiding it from the branch list
 -I --include       include names matching the given patterns
 -X --exclude       exclude names matching the given patterns
 -m --message       use <text> as commit message
 -l --logfile       read commit message from <file>
 -d --date          record datecode as commit date
 -u --user          record user as committer

一個示例命令是:

hg commit -m "added readme" README

注意事項

  • 如果省略文件列表,則會提交“hg status”報告的所有更改。
  • 如果您要提交合併結果,請不要提供任何文件名或-I / -X過濾器。
  • 如果未指定提交消息,則啟動配置的編輯器以提示您輸入消息。

如何設置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 protected]>

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

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


你如何得到最新的代碼?

Mercurial會記住從(在.hg / hgrc中)克隆存儲庫的位置,因此您只需運行:

hg pull

從origin-repository中提取最新的代碼。 (這不會更新工作目錄)

hg update

更新工作目錄。

hg pull -u

一次執行拉取和更新。


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

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

$ hg status

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

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

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

$ hg diff

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功能,包括擱置。

插件


我如何與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 export -o patchfile changeset

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

$ hg import patchfile

如何安裝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版本。


你如何合併分支機構?

$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary





version-control mercurial