Source

mercurial-cheatsheet / index.org

Full commit
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
#+TITLE: Mercurial チートシート
#+AUTHOR: Takumi IINO (troter)
#+EMAIL: takumi@timedia.co.jp, trot.thunder@gmail.com
#+LANGUAGE: ja

#+OPTIONS: ^:nil toc:2
#+STYLE: <link rel="stylesheet" type="text/css" href="org-mode-document.css" />

* はじめに
mercurialのチートシートが[[https://github.com/troter/troter.github.com/tree/master/mercurial-cheatsheet][github]]に上がっていることに疑問を覚えないこと。

* Mercurialとは
TODO:

* 最初の設定
** 設定ファイルの場所
| Windows                     | Linux/MacOSX/Cygwin |
|-----------------------------+---------------------|
| %USERPROFILE%\Mercurial.ini | $HOME/.hgrc         |

** ユーザ名の設定
設定ファイルに次の項目を追加します。
#+BEGIN_SRC text
[ui]
username=Takumi IINO <takumi@timedia.co.jp>
#+END_SRC

* helpの参照
** help(hg help)
#+BEGIN_SRC sh
% hg help
#+END_SRC
** サブコマンドのhelp(hg help [COMMAND])
#+BEGIN_SRC sh
% hg help [コマンド]
#+END_SRC
#+BEGIN_SRC sh
% hg help help           # helpのhelpを表示
#+END_SRC
** グローバルオプションを表示
hgのオプションに-vを追加する
#+BEGIN_SRC sh
% hg -v help log
#+END_SRC

* リポジトリを用意する
** リポジトリの新規作成(hg init)
#+BEGIN_SRC sh
% mkdir hello
% cd hello
% hg init
#+END_SRC

** リポジトリのクローン(hg clone)
#+BEGIN_SRC sh
% 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
$
#+END_SRC

* 確認を行う
** コミットログを確認する(hg log)
#+BEGIN_SRC sh
% hg log       # 全てのログを表示
% hg log -l 10 # 最新10個のログを表示
% hg log -l 10 --branch default # ブランチを指定してログを表示
#+END_SRC

** サマリー(hg summary)
#+BEGIN_SRC sh
% hg summary
parent: 13536:fac040b7e822 tip
 merge: drop resolve state for mergers with identical contents (issue2680)
branch: default
commit: (clean)
update: (current)
%
#+END_SRC

** 現在のリビジョン(hg parents)
#+BEGIN_SRC sh
% 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)

%
#+END_SRC

** 最新のリビジョン(hg tip)
#+BEGIN_SRC sh
% 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)

%
#+END_SRC

** 現在のブランチ(hg branch)
#+BEGIN_SRC sh
% hg branch
default
%
#+END_SRC

** ブランチの一覧とブランチ毎の最新のリビジョン(hg branches)
#+BEGIN_SRC sh
% hg branches
default                    13536:fac040b7e822
stable                     13534:4ec34de8bbb1 (inactive)
%
#+END_SRC

* 移動を行う
** 指定したリビジョンに移動(hg update [REV])
#+BEGIN_SRC sh
% hg update [リビジョン]
#+END_SRC
#+BEGIN_SRC sh
% hg parent --template "{rev}\n"
13536
% hg update 13524 # リビジョン 13524に移動
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg parent --template "{rev}\n"
13524
%
#+END_SRC

** 最新のリビジョンに移動(hg update)
#+BEGIN_SRC sh
% hg update
#+END_SRC
#+BEGIN_SRC sh
% 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
%
#+END_SRC

** ブランチの移動(hg update [BRANCH])
#+BEGIN_SRC sh
% hg update [ブランチ名]
#+END_SRC
#+BEGIN_SRC sh
% hg branch
default
% hg update stable
22 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg branch
stable
#+END_SRC

* ファイルの操作
操作のための新しいリポジトリを作りましょう
#+BEGIN_SRC sh
% mkdir hello-repo
% cd hello-repo
% hg init
#+END_SRC

** ファイルを追加する(hg add)
#+BEGIN_SRC sh
% echo 'puts "Hello, mercurial."' > hello.rb
% hg add hello.rb
%
#+END_SRC

** コミットする(hg commit)
#+BEGIN_SRC sh
% 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

%
#+END_SRC

** 変更を確認する(hg diff)
#+BEGIN_SRC sh
% 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 @@
-puts "Hello, mercurial."
+puts "Hello, Mercurial."
%
% # もう一つ追加してみる
% echo 'print "Hello, Mercurial.\n";' > hello.pl
% hg add hello.pl
% hg diff hello.pl
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";
%
#+END_SRC

** 変更されたファイル一覧(hg status)
#+BEGIN_SRC sh
% hg status
M hello.rb
A hello.pl
%
#+END_SRC

** 変更を取り消す(hg revert)
#+BEGIN_SRC sh
% hg revert hello.pl
% hg status
M hello.rb
? hello.pl
%
% hg add hello.pl # またaddしておこう
#+END_SRC

** コミットを取り消す(hg rollback)
#+BEGIN_SRC sh
% 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"
%
#+END_SRC
最新のコミットのみrollback可能
#+BEGIN_SRC sh
% 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
%
#+END_SRC

* multiple headsに関わる操作
multiple headsとは名前無しブランチが複数ある状態の事である。
** multiple headsを作る(hg update [REV] & hg commit)
#+BEGIN_SRC sh
% 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
%
#+END_SRC
** multiple headsの確認(hg heads)
#+BEGIN_SRC sh
% 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

%
#+END_SRC
** 2つのmultiple headsの統合(hg merge)
#+BEGIN_SRC sh
% 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
%
#+END_SRC
** 3つのmultiple headsの統合(hg merge -r [REV])
*** 3つheadの作成
#+BEGIN_SRC sh
% # 二つ目の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

%
#+END_SRC

*** 統合
単純なmergeは失敗する
#+BEGIN_SRC sh
% hg merge
abort: branch 'default' has 3 heads - please merge with an explicit rev
(run 'hg heads .' to see heads)
#+END_SRC
リビジョンを指定してmergeを行う
#+BEGIN_SRC sh
% 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

%
#+END_SRC

** 衝突の解決(hg resolve)
*** 衝突するシュチュエーション
*** 衝突の発生
*** 衝突の解決
* ブランチの操作
** ブランチの作成(hg branch [NAME])
** "別のブランチ"の変更の取り込み(hg merge)
** "別のリポジトリの同じブランチ"の変更の取り込み(hg pull -U)
** "別のリポジトリの同じブランチ"へ変更の送信(hg push)
** ブランチを閉じる(hg commit --close-branch)
* タグの操作
** タグをつける(hg tag)
* 用語
- tip :: 最新のリビジョンの事
- defaultブランチ :: svnのtrunk、gitのmasterの事
- multiple heads :: 名前無しブランチが複数できている状態の事

* 参考文献
- [[http://mercurial.selenic.com/wiki/JapaneseBeginnersGuides][初心者向けガイド]]
- [[http://foozy.bitbucket.org/hgbook-ja/index.ja.html][hgbook 日本語版]]
- [[http://beproud.bitbucket.org/bpmercurial-workflow/ja/][BPMERCURIAL-WORKFLOW ドキュメント]]
- [[http://www.geocities.jp/km_pp1/org-mode/org-mode-document.html][Org-mode による HTML 文書作成入門]]