初心者向けの Gitに触発された:決定的な実用ガイド .
これはbeginnersforpracticaluseにMercurialを使用するための情報の編集です。
初心者-ソース管理にあまり理解せずに触れたプログラマー。
実用的-大多数のユーザーが頻繁に遭遇する状況をカバー-リポジトリーの作成、分岐、マージ、リモートリポジトリーへの/からのプル/プッシュなど.
注:
- 実装方法ではなく、処理方法を説明します。
- 回答ごとに1つの質問に対処します。
- できる限り明確かつ簡潔に答えてください。
- 同じトピックに関する新しい回答を作成するのではなく、既存の回答を編集/拡張します。
- 詳細を知りたい人のために、 Mercurial wiki または HG Book へのリンクを提供してください。
質問:
無視は、リポジトリのルートにある.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を使用できます。
変更されたファイルのリストを表示するには:
$ hg status
これにより、変更された各ファイルとそのステータスが印刷されます。
M
-変更されました。ファイルは変更されており、変更はコミットされていません。A
-追加。ファイルは以前に追跡されていませんが、コミットするとMercurialは追跡を開始します。R
-削除されました。ファイルは以前に追跡されていましたが、Mercurialをコミットすると、今回および将来のコミットで追跡が中止されます。?
-不明。現在、ファイルはMercurialによって追跡されていません。 hg add
を使用して追加しない限り、コミットは効果がありません。!
-見つかりません。ファイルは追跡されましたが、Mercurialは作業コピーでそれを見つけることができません。ファイルに実際に加えられた変更を確認するには:
$ hg diff
$ hg init my-repository
両方ともhg diff
を使用します。 hg diff
を使用すると、作業コピーとヒント(最新のコミット)のすべての変更が表示されます。
「ファイルの2つのリビジョンをどのように比較しますか?」
$ hg diff -r{rev1} -r{rev2} {file.code}
上記のコマンドは、「file.code」のrev1とrev2で異なるものを表示します。
「現在のファイルと以前のリビジョンをどのように比較しますか?」
$ hg diff {file.code}
上記のコマンドは、「file.code」の現在のバージョンと最新のリビジョン(コミットされた最新のバージョン)で異なることを示します。
:D
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/
を付けて、同等の名前のブランチと区別します)。closed-branches
を保持します。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がわかりません。経験が豊富な方はこれを更新する必要があります。]以下の注目すべき機能があります。
branches/some-feature
はhg branch some-feature
のようになります。トランクをtrunk
に配置します(つまり、ユーザーが明示的に切り替えない限り、Mercurialのデフォルトブランチには何もありません。)それはこのように動作します:
クローン:
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 branch my-branch
または
$ hg cloneオリジナルリポジトリマイブランチ
branchは「仮想」ディレクトリを作成することに注意する必要があります(つまり、ファイルは同じままですが、hgはそれらをシステム内で異なるかのように扱います)一方で、clone実際の完全なコピーを作成します。厳密に言えば、cloneは分岐していません。
$ hg tag my-tag
リポジトリをクローンして、特別なtagリポジトリを作成することもできます。
$ hg clone working-repository my-tag-repository
Mercurialは、リポジトリのクローン元(.hg/hgrc内)を記憶しているため、次を実行できます。
hg pull
origin-repositoryから最新のコードを取得します。 (これは作業ディレクトリを更新しません)
hg update
作業ディレクトリを更新します。
hg pull -u
プルと更新の両方を一度に実行します。
Linuxのソースからインストールした場合、またはWindowsインストーラーを使用した場合は、適切に編集してください。
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パッケージのほとんどは現在のバージョンより遅れているように見えるので、 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のバージョンを使用できます。
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 」も参照してください。
$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary
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 [〜#〜] またはファイルシステムディレクトリになります。例えば:
そして、宛先は、ローカルファイルシステムでソースコードが配置される場所です。
現在のlocal * Mercurialリポジトリからこのコマンドを呼び出します
hg commit [OPTION]... [FILE]...
エイリアス:ci
オプションは次のとおりです。
-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/hgrcで「移植」拡張子を有効にします
[extensions]
transplant=
ターゲットブランチをロードし、ターゲットリビジョンを移植します。
eg:ブランチ 'foo'から現在のブランチにリビジョン81を選択します
$ hg transplant -b foo 81
リポジトリからファイルを削除し、次のコミットで削除するには:
$ hg remove {file(s)}
リポジトリからファイルを削除するが、削除しないようにするには
$ hg remove -Af {file(s)}
またはMercurial 1.3から
$ hg forget {file(s)}
リポジトリ全体またはファイルの改訂履歴を表示するには
$ hg log {file(s)}
または
$ hg history {file(s)}
そして リストを逆順で見る
$ hg log -r:
$ hg export -o patchfile changeset
次に、これを別のブランチにインポートできます:
$ hg import patchfile
いくつかのオプションが利用可能
$ 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の内容が含まれます。確認する必要があります。
この質問 から
$ hg update [-r REV]
@van:後でコミットする場合、効果的に新しいブランチを作成します。次に、このブランチでのみ作業を続けるか、最終的に既存のブランチをマージします。
$ hg commit -m "Commit message"
hg outgoing
を使用して、デフォルトのリポジトリに設定される変更セットのリストを取得します。
$ hg outgoing
実際のコード変更を取得するには、-p
(--patch
)を使用します。これにより、各変更セットが完全に出力されます。
$ hg outgoing -p