Mercurial
ワークショップ
 分散型バージョン管理システム勉強会@京都
        2011-07-23
自己紹介
●
    稲田 尚也 (@naoina)
●
    ガラスの十代 (0x19歳)
●
    京都のPythonista
●
    https://bitbucket.org/naoina
●
    面白い勉強会あれば教えてください
Mercurialとは
Mercurialとは
●
    バージョン管理システムの1つ
●
    DVCS
●
    実装はPython (一部C言語)
●
    読みは「まーきゅりある」
Mercurialとは
●
    バージョン管理システムの1つ
●
    DVCS
●
    実装はPython (一部C言語)
●
    読みは「まーきゅりある」
Mercurialとは
●
    コマンド名は「hg」
Mercurialとは
●
    コマンド名は「hg」
Mercurialとは
●
    コマンド名は「hg」


●
    Mercurial = 水銀 = hg
Mercurialとは
●
    コマンド名は「hg」


●
    Mercurial = 水銀 = hg
Mercurial使用プロジェクト
●
    Python
●
    Vim
●
    Mozilla
●
    OpenSolaris
●
    OpenJDK
●
    etc...
DVCSとは
●
    Distributed Version Control System
●
    分散バージョン管理システム
●
    SubversionやCVSは中央集中型
●
    SCMという言葉もあります
●
    Source Code Management
DVCSの特徴
DVCSの特徴
●
    サーバーを立てる必要がない
     –   リポジトリがローカルだけで完結できる!
●
    ネットワークに繋がってなくてもいい
     –   svn logとかイライラしますよね?
●
    脅威の冗長性
     –   全てのリポジトリが中央リポジトリ!
Mercurial
設定
設定
.hgrcを編集
 –   Unix系: $HOME/.hgrc
 –   Windows: %USERPROFILE%¥Mercurial.ini
設定
.hgrc
[ui]
username = Naoya INADA <naoina@kuune.org>

[extensions]
color =
graphlog =
Mercurialの使い方
Mercurialの使い方
1. リポジトリの作成
2. ファイルの追加
3. ファイルの変更
4. コミット
5. コミットの確認
リポジトリの作成




hg init
ファイルの追加




hg add
ファイルの変更


hg remove
 hg copy
hg rename
コミット




hg commit
コミットの確認




hg log
ここまでの内容で
質問あればどうぞ
続・Mercurialの使い方
6. リポジトリの複製
7. 変更の確認
8. 変更の取り消し
9. 変更の取り込み
10. 作業スペースの更新
11. マージ
12. 変更の反映
リポジトリの複製




hg clone
http://dvcskyoto.naniyueni.org/
変更の確認


 hg status
hg summary
  hg diff
コマンドのエイリアス
●
    ここでいう `コマンド` は

        この部分

     % hg status
コマンドのエイリアス
% hg status


% hg stat


% hg st


% hg s
hg: command 's' is ambiguous:
    serve showconfig status summary
変更の取り消し




hg revert
変更の取り込み



hg incoming
  hg pull
作業スペースの更新




hg update
マージ



hg merge
hg resolve
無名ブランチ
●
    変更がコンフリクトした場合に勝手に名
    前の無いブランチが作られる


    default

    changeset:1    changeset:2
無名ブランチ
●
    変更がコンフリクトした場合に勝手に名
    前の無いブランチが作られる
                   changeset:2a

    default

    changeset:1    changeset:2
無名ブランチ
●
    変更がコンフリクトした場合に勝手に名
    前の無いブランチが作られる
                   changeset:2a

    default

    changeset:1    changeset:2    changeset:3


                                  changeset:4
                                      (2a)
変更の反映



hg outgoing
  hg push
ここまでの内容で
質問あればどうぞ
拡張機能
●
    MQ [http://mercurial.selenic.com/wiki/JapaneseMqExtension]
       –   スイスアーミーナイフ
       –   パッチ管理やコミットの削除、改変など
●
    Rebase [http://mercurial.selenic.com/wiki/RebaseExtension]
       –   伝家の宝刀
       –   mergeの代わりにrebase
       –   知らないでは済まされない
拡張機能
●
    Bookmarks [http://mercurial.selenic.com/wiki/BookmarksExtension]
        –   チェンジセットへの削除可能なポインタが作れる
●
    Record [http://mercurial.selenic.com/wiki/RecordExtension]
        –   ファイル中の変更を選択してコミットできる
●
    Transplant [http://mercurial.selenic.com/wiki/TransplantExtension]
        –   特定チェンジセットだけを移植できる
Mercurial
   vs
  Git
履歴の指定
履歴の指定
Mercurial
  –   ハッシュ
  –   リビジョン番号
履歴の指定
Mercurial
  –   ハッシュ
  –   リビジョン番号

Git
  –   ハッシュのみ
Extension vs All-In-One
Extension vs All-In-One
Mercurial
  –   包丁
  –   足りない機能は拡張機能で個別に追加
Extension vs All-In-One
Mercurial
  –   包丁
  –   足りない機能は拡張機能で個別に追加

Git
  –   スイスアーミーナイフ
  –   最初からなんでもできる
pullの動作
pullの動作
Mercurial
  –   作業スペースの更新はしない
pullの動作
Mercurial
  –   作業スペースの更新はされない

Git
  –   作業スペースの更新が自動でされる
  –   hg pull -u
タイプ数
タイプ数
Mercurial
  –   hg
  –   2文字
タイプ数
Mercurial
  –   hg
  –   2文字

Git
  –   git
  –   3文字
タイプ数
Mercurial     10万回コマンドを打鍵
                hg → 200000文字
  –   hg        git → 300000文字
  –   2文字

Git
  –   git
  –   3文字
タイプ数
Mercurial     10万回コマンドを打鍵
                hg → 200000文字
  –   hg        git → 300000文字
  –   2文字     7key/secで打鍵しても
                hg → 約28571秒
Git             git → 約42857秒

  –   git
  –   3文字
タイプ数
Mercurial     10万回コマンドを打鍵
                hg → 200000文字
  –   hg        git → 300000文字
  –   2文字     7key/secで打鍵しても
                hg → 約28571秒
Git             git → 約42857秒

  –   git    約14286秒の差!
  –   3文字      (約4時間)
http://mercurial.selenic.com/wiki/GitConcepts
質疑応答
ありがとうございました

dvcs-kyoto