演習内容

Level 1: 衝突を解決してみよう

チェンジセットとマージの関係では衝突が起きないケースでのマージを行った。これを参考に意図的に衝突が起きるような更新を行い、衝突を解消せよ。この際、各自「~/HG/2013/account/mergetest/」というリポジトリを作成し、少なくとも下記3点について Readme.txt として報告すること。(Readme.txtをリポジトリに作成し、そこで報告すること)

注意: Mercurial 1.x と 2.x とでオプションや動作が異なる部分があるため、調べる際にはバージョンに注意すること。

演習結果

衝突を発生させるまでの手順

①test.txtの作成とcommit

% vim test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
% cat test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
hogehoge 1回目の編集
% hg add test.txt                                    [~/Desktop/hgDir/mergetest/e115703]
% hg commit -m "test.txtを追加"                      [~/Desktop/hgDir/e
% hg log                                             [~/Desktop/hgDir/mergetest/e115703]
changeset:   0:eb4d452e4485
tag:         tip
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 17:58:45 2013 +0900
summary:     test.txtを追加

②1回目のtest.txtの編集とcommit

% vim test.txt
% cat test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
fugafuga 2回目の編集
% hg commit -m "1行目を編集"                         [~/Desktop/hgD
% hg log                                             [~/Desktop/hgDir/mergetest/e115703]

changeset:   1:1b73337604eb
tag:         tip
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 18:02:32 2013 +0900
summary:     1行目を編集

changeset:   0:eb4d452e4485
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 17:58:45 2013 +0900
summary:     test.txtを追加

③changeset0へ変更(hg update 0)

% hg update 0                                        [~/Desktop/hgDir/mergetest/e115703]
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg log                                             [~/Desktop/hgDir/mergetest/e115703]
% hg parents                                         [~/Desktop/hgDir/mergetest/e115703]
changeset:   0:eb4d452e4485
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 17:58:45 2013 +0900
summary:     test.txtを追

④2回目のtest.txtの編集とcommit

% cat test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
piyopiyo 3回目の編集
% hg commit -m "1行目を編集(2回目)"                  [~/Des
created new head
% hg log                                             [~/Desktop/hgDir/mergetest/e115703]
changeset:   2:9aac7d316fe2
tag:         tip
parent:      0:eb4d452e4485
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 18:21:17 2013 +0900
summary:     1行目を編集(2回目)

changeset:   1:1b73337604eb
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 18:02:32 2013 +0900
summary:     1行目を編集

changeset:   0:eb4d452e4485
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 17:58:45 2013 +0900
summary:     test.txtを追加

⑤pushし、競合の発生を確認

% hg push                                            [~/Desktop/hgDir/mergetest/e115703]
pushing to ssh://info3dm@shark//home/info3dm/HG/2013/mergetest/e115703
searching for changes
abort: push creates new remote head 1b73337604eb!
(did you forget to merge? use push -f to force)

⑥競合内容の確認(hg diff)

% hg diff                                            [~/Desktop/hgDir/mergetest/e115703]
diff -r 9aac7d316fe2 test.txt
--- a/test.txt  Tue Oct 15 18:21:17 2013 +0900
+++ b/test.txt  Tue Oct 15 23:01:45 2013 +0900
@@ -1,1 +1,5 @@
+<<<<<<< local
 piyopiyo 3回目の編集
+=======
+fugafuga 2回目の編集
+>>>>>>> other

衝突を解決するまでの手順

①headを統合する(merge)

一度mergeを行って見る。

% hg merge                                           [~/Desktop/hgDir/mergetest/e115703]
merging test.txt
warning: conflicts during merge.
merging test.txt incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
% ls                                                 [~/Desktop/hgDir/mergetest/e115703]
test.txt       test.txt.orig
% hg resolve -l                                      [~/Desktop/hgDir/mergetest/e115703]
U test.txt

③衝突の解決(hg resolve)

% vim test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
% cat test.txt                                       [~/Desktop/hgDir/mergetest/e115703]
mogumogu 4回目の編集
% hg resolve -m test.txt                             [~/Desktop/hgDir/mergetest/e115703]
% hg resolve -l                                      [~/Desktop/hgDir/mergetest/e115703]
R test.txt

④commitとpushの成功を確認

% hg commit -m "test.txtの競合を除去"                [~/Desktop/hgDir
% hg push                                            [~/Desktop/hgDir/mergetest/e115703]
pushing to ssh://info3dm@shark//home/info3dm/HG/2013/mergetest/e115703
searching for changes
remote: チェンジセットを追加中
remote: マニフェストを追加中
remote: ファイルの変更を追加中
remote: 3 のチェンジセット(3 の変更を 1 ファイルに適用)を追加
% hg parents                                         [~/Desktop/hgDir/mergetest/e115703]
changeset:   3:c34e263f146a
tag:         tip
parent:      2:9aac7d316fe2
parent:      1:1b73337604eb
user:        Kazuto AGENA <mergetest/e115703@ie.u-ryukyu.ac.jp>
date:        Tue Oct 15 23:09:49 2013 +0900
summary:     test.txtの競合を除去

⑤hg log -vの結果

shark% hg log -v
チェンジセット:   4:3e110e0de1ee
タグ:             tip
ユーザ:           Kazuto AGENA 
日付:             Tue Oct 15 23:53:07 2013 +0900
ファイル:         Readme.txt
説明:
add Readme.txt


チェンジセット:   3:c34e263f146a
親:               2:9aac7d316fe2
親:               1:1b73337604eb
ユーザ:           Kazuto AGENA 
日付:             Tue Oct 15 23:09:49 2013 +0900
ファイル:         test.txt
説明:
test.txtの競合を除去


チェンジセット:   2:9aac7d316fe2
親:               0:eb4d452e4485
ユーザ:           Kazuto AGENA 
日付:             Tue Oct 15 18:21:17 2013 +0900
ファイル:         test.txt
説明:
1行目を編集(2回目)


チェンジセット:   1:1b73337604eb
ユーザ:           Kazuto AGENA 
日付:             Tue Oct 15 18:02:32 2013 +0900
ファイル:         test.txt
説明:
1行目を編集


チェンジセット:   0:eb4d452e4485
ユーザ:           Kazuto AGENA 
日付:             Tue Oct 15 17:58:45 2013 +0900
ファイル:         test.txt
説明:
test.txtを追加

故意に衝突を発生させ、最終的に衝突を解決することが出来た。

参考文献