初心者のためのMercurial:決定的な実用ガイド


237

初心者のためのGitに触発された:決定的な実用ガイド

これは、Mercurialを初心者実用的に使用するための情報をまとめたものです。

初心者-よく理解せずにソース管理に触れたプログラマー。

実用的-大多数のユーザーが頻繁に遭遇する状況をカバー-リポジトリの作成、ブランチ、マージ、リモートリポジトリからのプル/プッシュなど

  • 何かを実装する方法ではなく、何かを成し遂げる方法を説明します。
  • 回答ごとに1つの質問を扱います。
  • 可能な限り明確かつ簡潔に回答してください。
  • 同じトピックで新しい回答を作成するのではなく、既存の回答を編集/拡張します。
  • 詳細については、Mercurial wikiまたはHG Bookへのリンクを提供してください。

質問:

インストール/セットアップ

コードを操作する

タグ付け、ブランチ、リリース、ベースライン

その他の

その他のMercurialリファレンス

回答:


16

ファイルを無視するように設定するにはどうすればよいですか?

無視は、リポジトリのルートにある.hgignoreと呼ばれる通常のテキストファイルで構成されます。通常のファイルと同じように追加します。

hg add .hgignore

ファイルマッチングには、globとregexpの2つの構文オプションを使用できます。globはUNIXに似たファイル名展開で、regexpは正規表現です。あなたはそれ自体を追加するsyntax: globsyntax: regexp、ライン上でそれぞれをアクティブにします。それに続くすべての行は、次の構文マーカーまで、その構文を使用します。構文マーカーはいくつでも持つことができます。デフォルトの構文は正規表現であるため、正規表現のみを使用する場合は構文マーカーは必要ありません。

#でコメントを追加できます

例:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

無視は、管理されていないファイル(つまり、まだチェックインされていないファイル)にのみ適用されます。バージョン管理されているファイルを無視するには、スイッチ-Iおよび-Xを使用できます。


7
手動でhg addファイルを無視した場合、Mercurialがそれらを追跡することを言及しておくと便利です。たとえば、、などのファイルがたくさんありdeploy-test.confdeploy-production.confそれらをバージョン管理したくない(パスワードが含まれている可能性がある)が、バージョン管理をたいdeploy-template.conf場合は、無視deploy*して手動でを追加できdeploy-templace.confます。
スティーブロス

7

コミットされていないもの、または現在のコードベースのステータスをどのように確認しますか?

変更されたファイルのリストを表示するには:

$ hg status

これにより、変更された各ファイルとそのステータスが印刷されます。

  • M-変更されました。ファイルが変更され、変更はコミットされていません。
  • A-追加されました。ファイルは以前に追跡されていませんが、コミットするとMercurialが追跡を開始します。
  • R-削除されました。ファイルは以前に追跡されていましたが、コミットした場合、Mercurialはこれ以降のコミットで追跡を停止します。
  • ?- わからない。ファイルは現在Mercurialによって追跡されていません。を使用hg addして追加しない限り、コミットによる影響はありません。
  • !-行方不明。ファイルは追跡されましたが、Mercurialは作業コピーでそれを見つけることができません。

ファイルに実際に加えられた変更を確認するには:

$ hg diff

6

新しいプロジェクト/リポジトリをどのように作成しますか?

$ hg init my-repository

5

Subversionとどのようにやり取りしますか?

3つの方法があります。


変換拡張子は Mercurialのの一つに、既存のSubversionリポジトリのクローンを作成します。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-branchesSubversionで削除されたブランチを閉じるための特別なブランチを維持します。
  • それは必要と Subversionがトランク/支店/タグの規則に従ってレイアウトするリポジトリという。
  • コマンドセットは通常hg svn <subcommand>、 'svn'部分が不要になるように統合することを目的としています(つまり、他のMercurialリポジトリのようにSubversionクローンをできるだけ扱いたい)。;

それはこのように動作します:

クローン:

hg svnclone <Subversion URL> 

または(svn://URL のみ)

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のユーティリティ(ビットバケット木)。最近まで、これはSubversionリポジトリのクローンとプルのみが可能でしhgsvn 0.1.7たが、現時点ではプッシュをサポートしています。【どれだけ上手くいくのかわかりません。これ以上の経験がある人は、これを更新する必要があります。]次の注目すべき機能があります。

  • すべてのSVNタグに対してMercurialタグを生成します。
  • それは置くローカル上のタグを、すべてのSVNのリビジョンをマークするためにチェンジ。
  • Mercurialのすべてのリビジョンを、SVNブランチにちなんで名付けられたブランチに置きます。たとえばのようにbranches/some-featureなりますhg branch some-feature。トランクをオンにしますtrunk(つまり、ユーザーが明示的に切り替えない限り、Mercurialのデフォルトブランチには何もありません)。
  • ブランチとタグを識別して作成しようとしますが、それができない場合はスキップします。これは、Subversionリポジトリが従来のトランク/ブランチ/タグのレイアウトに従っていない場合に便利です。

それはこのように動作します:

クローン:

hgimportsvn <Subversion URL>

引く:

hgpullsvn

押す:

hgpushsvn

着信:

hgpullsvn -n

発信:

hgpushsvn -n

リポジトリ全体をチェックアウトする:

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

トランクだけをチェックアウトする:

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

2
私が使用hg convertしたばかりで、多くのコミットが含まれるsvnリポジトリがある場合、本当に時間がかかります。を使用してローカルリポジトリを設定するとsvnsync、処理が大幅に高速化されます。特に、変換コマンドに間違ったオプションがあったため、何度か実行する必要がある場合に役立ちます。
Debilski、2009年

SVNリポジトリのローカルコピーがあれば、これらの方法はすべて高速になると思います。しかし、常に完全なリポジトリにアクセスできるとは限りません。svnsyncURLだけでなく、リポジトリの実際のファイルにアクセスする必要があると思いました。
クォーク、

hgsvnは現在メンテナンスモードになっているため、積極的に開発されていないことに注意してください。代わりにhgsubversionを使用することをお勧めします。
Jon L.、

5

ファイルの2つのリビジョン、または現在のファイルと以前のリビジョンをどのように比較しますか?

どちらも使用しますhg diff。ときhg diff(最新のコミット)作業コピーとチップ内のすべての変更を使用している表示されます。

「ファイルの2つのリビジョンをどのように比較しますか?」

$ hg diff -r{rev1} -r{rev2} {file.code}

上記のコマンドは、「file.code」のrev1とrev2で異なる表示になります。

「現在のファイルと以前のリビジョンをどのように比較しますか?」

$ hg diff {file.code}

上記のコマンドは、「file.code」の現在のバージョンと最新のリビジョン(コミットされた最新のバージョン)との違いを示します。

:D


4

特定のファイルセットの特定のリビジョンセットをどのように「マーク」、「タグ付け」、または「リリース」して、いつでもそれを後からプルできるようにしますか?

$ hg tag my-tag

リポジトリを複製して、特別なタグリポジトリを作成することもできます。

$ hg clone working-repository my-tag-repository

3
なんでhg tag my-tag
スティーブロス

4

どのように分岐しますか?

$ hgブランチmy-ブランチ

または

$ hg clone original-repository my-branch

それは点に留意する必要があるものの、分岐が「仮想」ディレクトリを作成しながら、(つまり、ファイルは同じまま、彼らはシステム内部で異なっていたかのようにHG扱い、それらを)クローンが、実際、完全なコピーを作成します。厳密に言えば、クローンは分岐しません。


4
これは、Gitの人々が常にMercurialの人々をお勧めすることをからかうヘビーウェイトな方法です。初心者に軽く、より身近な方法は次のようになりますhg branch my-branch
スティーブLosh

8
これらは2つのまったく異なる操作であることに注意してください。
ステパンチェグ2009

2
Mercurialでの分岐に役立つこのガイドを見つけました:stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial
mbillard

(hgブランチとして)永続的ではないhgの軽量ブランチの場合は、mercurialブックマーク拡張機能を使用してください
hultqvist

GoodEnoughによってリンクされた記事は、ブックマークを使用した別の軽量な方法を提供しています。独自のブランチに値する重要ではない変更にはかなり良いようです
Casebash 2010

4

Mercurialの良いGUI / IDEプラグイン?

GUI

  • TortoiseHgは、ほぼすべてのOSに対応しています。Windows Explorer統合が含まれています。LinuxおよびMax OS Xを含む他のいくつかのOSでも動作します。インターフェイスはやや不格好で、最初は少し変ですが、非常に完全で強力です。
  • MurkyはMac OS X 10.5以降で動作します。Murkyはリポジトリと基本的なコマンドの探索には適していますが、コマンドラインの使用方法も知っておく必要があります。
  • MacHgは、Murkyよりも機能が多く洗練された素晴らしいMac OS X Guiですが、それでもコマンドラインが必要です。
  • SourceTreeはもともとMacクライアントであり、Windowsバージョンはごく最近利用可能になりました。かなり素晴らしいUI(少なくともOS Xでは)、シェルフを含むHg機能の大部分をサポートします。

プラグイン


3

変更をどのようにコミットしますか?

現在のローカル*水銀リポジトリからこのコマンドを呼び出す

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フィルターを指定しないでください。
  • コミットメッセージが指定されていない場合、構成されたエディターが開始され、メッセージを求めるプロンプトが表示されます。

3

Mercurialのセットアップ方法は?

Mercurial ~/.hgrcは* nixシステムと%UserProfile%\mercurial.iniWindowsシステムに構成情報を保存します。(%UserProfile%通常"C:\Documents and Settings\[username]\"、Windows 2000またはWindows XPシステム、および通常C:\Users\[username]\はWindows VistaおよびWindows 7システムです。)

開始点として、.hgrcorに以下を配置してMercurialユーザー名を設定する必要がありますmercurial.ini

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

WindowsシステムのTortoiseHgユーザーは、代わりに実行できます hgtk userconfig

Mercurial:The Definitive Guide」の第2章にあるMercurial設定ファイルの作成」も参照してください。


3

どのようにブランチをマージしますか?

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

新しいMercurialユーザーとして、また一般にソースリビジョンコントロールの初心者として、私はこの答えをよく理解していません。投稿を明確にして拡大していただけませんか?まだmergeコマンドの使い方がよくわかりません。
Jamin Grey

3

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シェル拡張であり、Mercurialをインストールします。CygwinはMercurialもインストールできます

別の方法としては(ここでリンクされている説明が長すぎるため)、ソースからMercurialの最適化されたバージョンまたは純粋なPythonバージョンを構築できます。


1
ソースから水銀をビルドするには、Pythonヘッダーが必要です。パッケージ指向のディストリビューションを使用している場合は、python-devまたはpython-develをインストールします。
Nicolas Dumazet 09

3

どのようにして最新のコードを入手しますか?

Mercurialは(.hg / hgrcの)リポジトリのクローン元を記憶しているので、次のように実行できます:

hg pull

origin-repositoryから最新のコードを取得します。(これは作業ディレクトリを更新しません)

hg update

作業ディレクトリを更新します。

hg pull -u

プルと更新の両方を一度に実行します。


1
原点は.hg/hgrcクローンを作成するときに記録されるため、プル/プッシュするときに原点を指定する必要はありません。必要[paths].hg/hgrc応じて、セクションにさらにパスを追加できます。
マーティンガイスラー、

3

コードをどのようにチェックアウトしますか?

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

ここで、sourceは、リポジトリにある元のファイルのソースです。リモートURLまたはファイルシステムディレクトリにすることができます。例えば:

そして宛先は、ソースコードがローカルファイルシステムで配置される場所です。


1

変更をどのようにコミットしますか?

$ hg commit -m "Commit message"

1

プッシュすると、どのような変更がアップストリームリポジトリに送信されるかをどのように確認しますか

hg outgoingデフォルトのリポジトリに設定されるチェンジセットのリストを取得するために使用します:

$ hg outgoing

実際のコード変更を取得するには、-p--patch)を使用します。これにより、各チェンジセットが完全に出力されます。

$ hg outgoing -p

1

リポジトリからファイルをどのように削除しますか?

リポジトリからファイルを削除し、次のコミット時に削除するには:

$ hg remove {file(s)}

リポジトリからファイルを削除しますが、削除はしません

$ hg remove -Af {file(s)}

またはMercurial 1.3から

$ hg forget {file(s)}

1

どのようにして以前のバージョンのコードに戻るのですか?

この質問から

$ hg update [-r REV]

@van:後でコミットすると、新しいブランチが効果的に作成されます。次に、このブランチでのみ作業を続けるか、最終的には既存のブランチをマージします。


1

チェンジセットを元に戻すにはどうすればよいですか?

利用可能ないくつかのオプション

Easy Way(単一の変更セットをバックアウト)

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

Hard Way(手動で比較して適用)

ステップ1:リビジョン107と108の間で変更された内容を元に戻すパッチファイルを作成します。

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

(または、--reverseを指定せずに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の内容が含まれます。確認する必要があります。


1
これは何のhg backoutためですか?
Wim Coenen、

はい。ただし、hgバックアウトは、バックアウトへの単一のチェンジセットIDのみをサポートします。間違いなく言及する必要があります。それに応じて更新します
slf

1

ファイルまたはリポジトリの変更履歴をどのように確認しますか?

リポジトリ全体またはファイルの変更履歴を表示するには

$ hg log {file(s)}

または

$ hg history {file(s)}

そしてリストを逆順見る

$ hg log -r:

1

あるブランチの一部を別のブランチにどのようにマージしますか?

.hg / hgrcで 'transplant'拡張子を有効にする

[extensions]
transplant=

ターゲットブランチをロードしてから、ターゲットリビジョンを移植します。
例:ブランチ81から現在のブランチへのチェリーピックリビジョン81

$ hg transplant -b foo 81

Mercurialの新しいバージョンでは、移植拡張機能は必要ありません。組み込みgraftコマンドを使用して同じことを行うことができます。hg help graft詳細はこちら
DOOManiac

1

特定のチェンジセットからパッチをどのように抽出しますか?

$ hg export -o patchfile changeset

次に、これを別のブランチにインポートできます。

$ hg import patchfile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.