Mercurial チートシート
Table of Contents
1 はじめに
mercurialのチートシートがgithubに上がっていることに疑問を覚えないこと。
2 Mercurialとは
TODO:
3 最初の設定
3.1 設定ファイルの場所
Windows | Linux/MacOSX/Cygwin |
---|---|
%USERPROFILE%\Mercurial.ini | $HOME/.hgrc |
3.2 ユーザ名の設定
設定ファイルに次の項目を追加します。
[ui] username=Takumi IINO <takumi@timedia.co.jp>
4 helpの参照
4.1 help(hg help)
% hg help
4.2 サブコマンドのhelp(hg help [COMMAND])
% hg help [コマンド]
% hg help help # helpのhelpを表示
4.3 グローバルオプションを表示
hgのオプションに-vを追加する
% hg -v help log
5 リポジトリを用意する
5.1 リポジトリの新規作成(hg init)
% mkdir hello % cd hello % hg init
5.2 リポジトリのクローン(hg clone)
% hg clone http://selenic.com/hg mercurial-repo requesting all changes adding changesets adding manifests adding file changes added 13537 changesets with 26617 changes to 1971 files updating to branch default 872 files updated, 0 files merged, 0 files removed, 0 files unresolved $
6 確認を行う
6.1 コミットログを確認する(hg log)
% hg log # 全てのログを表示 % hg log -l 10 # 最新10個のログを表示 % hg log -l 10 --branch default # ブランチを指定してログを表示
6.2 サマリー(hg summary)
% hg summary parent: 13536:fac040b7e822 tip merge: drop resolve state for mergers with identical contents (issue2680) branch: default commit: (clean) update: (current) %
6.3 現在のリビジョン(hg parents)
% hg parents changeset: 13536:fac040b7e822 tag: tip user: Matt Mackall <mpm@selenic.com> date: Sat Mar 05 16:34:59 2011 -0600 summary: merge: drop resolve state for mergers with identical contents (issue2680) %
6.4 最新のリビジョン(hg tip)
% hg tip changeset: 13536:fac040b7e822 tag: tip user: Matt Mackall <mpm@selenic.com> date: Sat Mar 05 16:34:59 2011 -0600 summary: merge: drop resolve state for mergers with identical contents (issue2680) %
6.5 現在のブランチ(hg branch)
% hg branch default %
6.6 ブランチの一覧とブランチ毎の最新のリビジョン(hg branches)
% hg branches default 13536:fac040b7e822 stable 13534:4ec34de8bbb1 (inactive) %
7 移動を行う
7.1 指定したリビジョンに移動(hg update [REV])
% hg update [リビジョン]
% hg parent --template "{rev}\n" 13536 % hg update 13524 # リビジョン 13520に移動 10 files updated, 0 files merged, 0 files removed, 0 files unresolved % hg parent --template "{rev}\n" 13524 %
7.2 最新のリビジョンに移動(hg update)
% hg update
% hg parent --template "{rev}\n" 13524 % hg update # 最新のリビジョンに移動 10 files updated, 0 files merged, 0 files removed, 0 files unresolved % hg parent --template "{rev}\n" 13536 %
7.3 ブランチの移動(hg update [BRANCH])
% hg update [ブランチ名]
% hg branch default % hg update stable 22 files updated, 0 files merged, 0 files removed, 0 files unresolved % hg branch stable
8 ファイルの操作
操作のための新しいリポジトリを作りましょう
% mkdir hello-repo % cd hello-repo % hg init
8.1 ファイルを追加する(hg add)
% echo 'puts "Hello, mercurial."' > hello.rb % hg add hello.rb %
8.2 コミットする(hg commit)
% hg tip changeset: -1:000000000000 tag: tip user: date: Thu Jan 01 00:00:00 1970 +0000 % hg commit -m "add hello.rb" % hg tip changeset: 0:c0d1b673238b tag: tip user: Takumi IINO <takumi@timedia.co.jp> date: Sun Mar 06 22:27:01 2011 +0900 summary: add hello.rb %
8.3 変更を確認する(hg diff)
% sed -i -e s/m/M/ hello.rb % hg diff diff -r c0d1b673238b hello.rb --- a/hello.rb Sun Mar 06 22:27:01 2011 +0900 +++ b/hello.rb Sun Mar 06 22:34:35 2011 +0900 @@ -1,1 +1,1 @@ p-puts "Hello, mercurial." +puts "Hello, Mercurial." % echo 'print "Hello, Mercurial.\n";' > hello.pl % hg add hello.pl % hg diff diff -r c0d1b673238b hello.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hello.pl Sun Mar 06 22:36:56 2011 +0900 @@ -0,0 +1,1 @@ +print "Hello, Mercurial.\n"; %
8.4 変更されたファイル一覧(hg status)
% hg status M hello.rb A hello.pl %
8.5 変更を取り消す(hg revert)
% hg revert hello.pl % hg status M hello.rb ? hello.pl % % hg add hello.pl # またaddしておこう
8.6 コミットを取り消す(hg rollback)
% hg commit -m "add perl sample" # 二つの変更をコミットしてしまった % hg diff -c 1 diff -r c0d1b673238b -r 30b4e1e501a3 hello.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hello.pl Sun Mar 06 22:42:41 2011 +0900 @@ -0,0 +1,1 @@ +print "Hello, Mercurial.\n"; diff -r c0d1b673238b -r 30b4e1e501a3 hello.rb --- a/hello.rb Sun Mar 06 22:27:01 2011 +0900 +++ b/hello.rb Sun Mar 06 22:42:41 2011 +0900 @@ -1,1 +1,1 @@ -puts "Hello, mercurial." +puts "Hello, Mercurial." % % hg rollback repository tip rolled back to revision 0 (undo commit) working directory now based on revision 0 % % hg commit -m "camelize" hello.rb % hg commit -m "add perl sample" %
最新のコミットのみrollback可能
% hg log --template "{rev}:{node}: {desc}\n" 2:c0266fae871b5783d4f4a50faf0694d41df01418: add perl sample 1:f491ca2a61140034ed906d7d45893838493246c8: camelize 0:c0d1b673238bd257f79a7c2779f1e0d8e24d3524: add hello.rb % % hg rollback repository tip rolled back to revision 1 (undo commit) working directory now based on revision 1 % % hg rollback no rollback information available % % hg log --template "{rev}:{node}: {desc}\n" 1:f491ca2a61140034ed906d7d45893838493246c8: camelize 0:c0d1b673238bd257f79a7c2779f1e0d8e24d3524: add hello.rb % % hg commit -m "add perl sample" % hg log --template "{rev}:{node}: {desc}\n" 2:c0266fae871b5783d4f4a50faf0694d41df01418: add perl sample 1:f491ca2a61140034ed906d7d45893838493246c8: camelize 0:c0d1b673238bd257f79a7c2779f1e0d8e24d3524: add hello.rb %
9 multiple headsに関わる操作
multiple headsとは名前無しブランチが複数ある状態の事である。
9.1 multiple headsを作る(hg update [REV] & hg commit)
% hg log --template "{rev}:{node}: {desc}\n" 2:c0266fae871b5783d4f4a50faf0694d41df01418: add perl sample 1:f491ca2a61140034ed906d7d45893838493246c8: camelize 0:c0d1b673238bd257f79a7c2779f1e0d8e24d3524: add hello.rb % % # 一つ前に戻る % hg update 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved % hg parents --template "{rev}:{node}\n" 1:f491ca2a61140034ed906d7d45893838493246c8 % % # 二つ目のheadsを作る % echo 'print "Hello, Mercurial."' > hello.py % hg add hello.py % hg commit -m "add python sample" created new head %
9.2 multiple headsの確認(hg heads)
% hg heads changeset: 3:980f8866917a tag: tip parent: 1:f491ca2a6114 user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:10:18 2011 +0900 summary: add python sample changeset: 2:46f0166b17d8 user: Takumi IINO <takumi@timedia.co.jp> date: Sun Mar 06 22:53:57 2011 +0900 summary: add perl sample %
9.3 2つのmultiple headsの統合(hg merge)
% hg merge 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) % hg status M hello.pl % % # この状態でparentsを確認すると二つあることがわかる。 % hg parents --template "{rev}:{node}\n" 3:980f8866917a1098d08f1e1b85dc396fecbc83ad 2:46f0166b17d886637c30e6f486b23043be56b22e % % hg commit -m "merge changeset: 2:46f0166b17d8" % hg heads changeset: 4:4b83e608a7d0 tag: tip parent: 3:980f8866917a parent: 2:46f0166b17d8 user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:17:50 2011 +0900 summary: merge changeset: 2:46f0166b17d8 % ls hello.pl hello.py hello.rb %
9.4 3つのmultiple headsの統合(hg merge -r [REV])
9.4.1 3つheadの作成
% # 二つ目のheadを作る % hg update 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved % echo '(display "Hello, Mercurial.")(newline)' > hello.scm % hg add hello.scm % hg commit -m "add scheme sample" created new head % % # 三つ目のheadを作る % hg update 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved % echo '(princ (format nil "Hello, Mercurial.~%"))' > hello.cl % hg add hello.cl % hg commit -m "add common lisp sample" created new head % % hg heads changeset: 6:6a0eac3064c9 tag: tip parent: 3:980f8866917a user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:34:33 2011 +0900 summary: add common lisp sample changeset: 5:bcb5dec879f9 parent: 3:980f8866917a user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:22:44 2011 +0900 summary: add scheme sample changeset: 4:4b83e608a7d0 parent: 3:980f8866917a parent: 2:46f0166b17d8 user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:17:50 2011 +0900 summary: merge changeset: 2:46f0166b17d8 %
9.4.2 統合
単純なmergeは失敗する
% hg merge abort: branch 'default' has 3 heads - please merge with an explicit rev (run 'hg heads .' to see heads)
リビジョンを指定してmergeを行う
% hg parents --template "{rev}:{node}\n" 6:6a0eac3064c9543384538a5f3ce8e28ad21f5db1 % % # 一つ目のmerge % hg merge -r 4 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) % % # いっぺんに複数のマージは行えない % hg merge -r 5 abort: outstanding uncommitted merges % % # 一つ目をコミット % hg commit -m "Merged changes" % % # 二つ目のmergeとコミット % hg merge -r 5 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) % hg commit -m "Merged changes" % % # headの統合が完了 % hg heads changeset: 8:48d139b4230f tag: tip parent: 7:89f3c6e6d974 parent: 5:bcb5dec879f9 user: Takumi IINO <takumi@timedia.co.jp> date: Mon Mar 07 00:47:37 2011 +0900 summary: Merged changes %
9.5 衝突の解決(hg resolve)
9.5.1 衝突するシュチュエーション
9.5.2 衝突の発生
9.5.3 衝突の解決
10 ブランチの操作
10.1 ブランチの作成(hg branch [NAME])
10.2 "別のブランチ"の変更の取り込み(hg merge)
10.3 "別のリポジトリの同じブランチ"の変更の取り込み(hg pull -U)
10.4 "別のリポジトリの同じブランチ"へ変更の送信(hg push)
10.5 ブランチを閉じる(hg commit –close-branch)
11 タグの操作
11.1 タグをつける(hg tag)
12 用語
- tip
- 最新のリビジョンの事
- defaultブランチ
- svnのtrunk、gitのmasterの事
- multiple heads
- 名前無しブランチが複数できている状態の事
Date: 2011-03-07 12:43:02
HTML generated by org-mode 6.33x in emacs 23