web-dev-qa-db-ja.com

Mercurial for Beginners:The Definitive Practical Guide

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

これはbeginnersforpracticaluseにMercurialを使用するための情報の編集です。

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

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

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

質問:

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

コードでの作業

タグ付け、分岐、リリース、ベースライン

その他

その他のMercurialの参照

237
Laz

ファイルを無視するようにどのように構成しますか?

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

hg add .hgignore

ファイルのマッチングには、globとregexpの2つの構文オプションがあります。 globはUNIXのようなファイル名展開であり、regexpは正規表現です。各行にsyntax: globまたはsyntax: regexpを単独で追加して、それぞれをアクティブにします。次のすべての行は、次の構文マーカーまでその構文を使用します。必要な数の構文マーカーを使用できます。デフォルトの構文は正規表現です。したがって、正規表現のみを使用する場合、構文マーカーは必要ありません。

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

例:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

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

16
Joakim Lundborg

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

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

$ hg status

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

  • M-変更されました。ファイルは変更されており、変更はコミットされていません。
  • A-追加。ファイルは以前に追跡されていませんが、コミットするとMercurialは追跡を開始します。
  • R-削除されました。ファイルは以前に追跡されていましたが、Mercurialをコミットすると、今回および将来のコミットで追跡が中止されます。
  • ?-不明。現在、ファイルはMercurialによって追跡されていません。 hg addを使用して追加しない限り、コミットは効果がありません。
  • !-見つかりません。ファイルは追跡されましたが、Mercurialは作業コピーでそれを見つけることができません。

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

$ hg diff
7
Steve Losh

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

$ hg init my-repository
6
lutz

ファイルの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

5
NawaMan

Subversionとどのようにインターフェイスしますか?

3つの方法があります。


convert extension は、既存の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リポジトリに新しいリビジョンを少しずつ取り込むことができます(プルに少し似ています)。ただし、Mercurialのリビジョンを取得してSubversionに送り返すことはできません(プッシュなし)。 [XXX:間違っている場合は修正してください]


hgsubversion拡張 。 Subversion APIを使用してSubversionリポジトリと通信するため、多くの点で最も洗練されたソリューションです。 hg-svnブリッジになることを目指しています。リビジョンの完全なラウンドトリップ(完全なクローン、プル、プッシュ)が可能ですが、この記事の執筆時点では[XXX:修正された場合は修正します]それはまだ開発中であり、まだ公式リリースはありません。結果として、最新のMercurial(この記事の執筆時点では1.3)のみで動作します。

  • タグとブランチをマッピングします(すべてのタグの前にtags/を付けて、同等の名前のブランチと区別します)。
  • Subversionで削除されるブランチを閉じるための特別なブランチclosed-branchesを保持します。
  • Subversionリポジトリをtrunk/branches/tagsの規則に従ってレイアウトする必要があります。
  • 通常、コマンドセットは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 ユーティリティ( bitbucket tree )。最近まで、これはSubversionリポジトリのクローンとプルのみを許可していましたが、hgsvn 0.1.7現在、Pushをサポートしています。 [Pushの方法wellがわかりません。経験が豊富な方はこれを更新する必要があります。]以下の注目すべき機能があります。

  • SVNタグごとにMercurialタグを生成します。
  • SVNリビジョンをマークするために、localタグをeveryチェンジセットに配置します。
  • SVNブランチにちなんで名付けられた名前付きブランチにすべてのMercurialリビジョンを配置します。たとえば、branches/some-featurehg 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
5
quark

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

$ hg branch my-branch

または

$ hg cloneオリジナルリポジトリマイブランチ

branchは「仮想」ディレクトリを作成することに注意する必要があります(つまり、ファイルは同じままですが、hgはそれらをシステム内で異なるかのように扱います)一方で、clone実際の完全なコピーを作成します。厳密に言えば、cloneは分岐していません。

4
lutz

Mercurial用の優れたGUI/IDEプラグイン?

GUI

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

プラグイン

4
Macke

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

$ hg tag my-tag

リポジトリをクローンして、特別なtagリポジトリを作成することもできます。

$ hg clone working-repository my-tag-repository
4
lutz

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

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

hg pull

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

hg update

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

hg pull -u

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

3
Laz

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

(from 分散バージョン管理システムMercurialの紹介

Mercurialの最新バージョンのバイナリパッケージ があります。 TortoiseHg は、MercurialのWindows Shell拡張機能であり、インストールします。 Cygwin はMercurialもインストールできます。

代わりに(ここにリンクされている非常に長い命令)、 最適化されたビルド または 純粋なPython ソースからのMercurialのバージョンを使用できます。

3
Dave Everitt

Mercurialのセットアップ方法

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

出発点として、次を.hgrcまたはMercurial.iniに配置してMercurialユーザー名を設定する必要があります。

# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <[email protected]>

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

Mercurial設定ファイルの作成 in chapter 2 of」 Mercurial:The Definitive Guide 」も参照してください。

3
las3rjock

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

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

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

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 [〜#〜] またはファイルシステムディレクトリになります。例えば:

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

3
Joshua Partogi

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

現在のlocal * 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

[〜#〜] notes [〜#〜]

  • ファイルのリストを省略すると、「hg status」によって報告されたすべての変更がコミットされます。
  • マージの結果をコミットする場合は、ファイル名または-I/-Xフィルターを提供しないでください。
  • コミットメッセージが指定されていない場合、構成されたエディターが起動され、メッセージのプロンプトが表示されます。
3
Joshua Partogi

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

.hg/hgrcで「移植」拡張子を有効にします

[extensions]
transplant=

ターゲットブランチをロードし、ターゲットリビジョンを移植します。
eg:ブランチ 'foo'から現在のブランチにリビジョン81を選択します

$ hg transplant -b foo 81
1
John Mee

リポジトリからファイルを削除するにはどうすればよいですか?

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

$ hg remove {file(s)}

リポジトリからファイルを削除するが、削除しないようにするには

$ hg remove -Af {file(s)}

またはMercurial 1.3から

$ hg forget {file(s)}
1
David Sykes

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

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

$ hg log {file(s)}

または

$ hg history {file(s)}

そして リストを逆順で見る

$ hg log -r:
1
David Sykes

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

$ hg export -o patchfile changeset

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

$ hg import patchfile
1
David Sykes

チェンジセットをどのように元に戻しますか?

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

簡単な方法(単一の変更セットをバックアウト)

$ 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で--reverseを指定しない場合も同じことが行われます)

ステップ2:パッチファイルを適用します。

patch -p1 < revert-change.patch

Diffの一部は適用に失敗する場合があります。例:

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

.rejファイルには、適用に失敗したdiffの内容が含まれます。確認する必要があります。

1
slf

以前のバージョンのコードにどのように戻りますか?

この質問 から

$ hg update [-r REV]

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

1
David Sykes

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

$ hg commit -m "Commit message"
1
NawaMan

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

hg outgoingを使用して、デフォルトのリポジトリに設定される変更セットのリストを取得します。

$ hg outgoing

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

$ hg outgoing -p
1
robotadam