ハンズオンその1
Mercurial入門
名古屋アジャイル勉強会 分科会
 開発ツール勉強会 #1 Mercurial入門
                  ハンズオン解説版




               2011年12月10日(土) You&I
3.Mercurialの使い方
   今回はシンプルに、以下の構成を構築
    し、Mercurialがどのような動作にな
    るのかを体験して頂きます。
    ◦ 中央リポジトリ方式
    ◦ ユーザー2人
3.Mercurialの使い方

               リポジトリ
                (repos)




    リポジトリ                 リポジトリ
    (myself)               (other)
  作業コピー                       作業コピー



   分散リビジョン管理方式(中央サーバー利用)
3.Mercurialの使い方


      環境の確認
       Mercurialの
      インストール状況
       を確認する。
環境の確認(1/4)
 まずは、ターミナルコンソール・コマ
  ンドプロンプトを起動しましょう。
 以下の指示に従って下さい。
    1. 以下のコマンドを実行
    hg   version
    2. 以下のコマンドを実行
    hg   versio
    3. 以下のコマンドを実行
    hg   vers
環境の確認(2/4)
 このようにMercurialのコマンドは、
  コマンドの省略が可能となります。
 どこまで省略できるかは、似た名前の
  コマンドが存在するか否かで決定され
  ますので、コマンドを実行して覚えま
  しょう。
    1. 以下のコマンドを実行(Windowsのみ)
     set LANG=ja
     hg vers
環境の確認(3/4)
   以下の指示に従って下さい。
    1. 以下のコマンドを実行
    hg   help
    2. 以下のコマンドを実行
    hg   help   |   more
   helpコマンドを実行すると、利用可能
    なコマンドの一覧が確認出来ます。プ
    ラグインを有効にすると、利用可能な
    プラグインも表示されます。
環境の確認(4/4)
   Mercurialのコマンドは、基本的にリ
    ポジトリが存在するフォルダでのみ実
    行が可能なコマンドが殆どです。
    1. 以下のコマンドを実行
    hg   status
環境の確認(解説)
   Mercurialのコマンドについて以下の
    事を確認する
    ◦ Mercurialのコマンドは、省略形がある。
    ◦ Mercurialのhelpコマンドの使い方。
    ◦ 殆どのMercurialのコマンドは、リポジト
      リが存在するフォルダ配下でのみ実行可
      能である。
3.Mercurialの使い方


  リポジトリの作成
       Mercurialの
        リポジトリ
       を作成する。
リポジトリの作成(1/5)
   リポジトリの作成前に、まず今回の勉
    強会用の作業フォルダを作成します。
    1. 以下のコマンドを実行
    mkdir   C:¥TEMP¥758agile¥handson1 (Windows)
    mkdir   –p ~/758agile/handson1 (Linux/Mac)
    2. 以下のコマンドを実行
    cd   "1の手順のフォルダパス"
リポジトリの作成(2/5)
   リポジトリを作成する
    1. 以下のコマンドを実行
    hg   init    repos
    2. 以下のコマンドを実行
    cd   repos
    3. 以下のコマンドを実行
    dir             (Windows)
    ls -la          (Linux/Mac)
リポジトリの作成(3/5)
   リポジトリのある場所でコマンドを実
    行する
    1. 以下のコマンドを実行
    hg   status
    hg   st
    2. 以下のコマンドを実行
    hg   summary
    hg   sum
リポジトリの作成(4/5)
 リポジトリの作成はinitコマンドを実
  行するだけで可能。
 各コマンドの詳細情報はhelpコマンド
  で調べられます。
    1. 以下のコマンドを実行
    hg   help   init
    hg   help   [コマンド名]
リポジトリの作成(5/5)
   フォルダ構成の確認
    ◦ ~/758agile
      handson1
       repos
         .hg
リポジトリの作成(解説)
   以下の事を実施・確認
    ◦ ハンズオン用の作業フォルダ作成。
    ◦ ハンズオン用の共有リポジトリ作成。
    ◦ リポジトリにはどのようなファイル・
      フォルダがあるか確認する。
    ◦ リポジトリ配下で実行可能なMercurialの
      コマンドを確認
    ◦ コマンド毎のhelpコマンドの使い方を確
      認する。
3.Mercurialの使い方


  リポジトリの複製
      リポジトリを複製し
     自分の作業スペースを
        用意する。
リポジトリの複製(1/3)
   リポジトリを複製するに辺り、作業場
    所を移動する。
    1. 以下のコマンドを実行
    cd   C:¥TEMP¥758agile¥handson1   (Windows)
    cd   ~/758agile/handson1         (Linux/Mac)
   リポジトリを複製する。
    1. 以下のコマンドを実行
    hg   clone   repos   myself (自分用)
    hg   clone   repos   other (他人用)
リポジトリの複製(2/3)
   リポジトリを複製する。
    3. 以下のファイルをエディタで開く
    notepad .¥other¥.hg¥hgrc (Windows)
    vi ./other/.hg/hgrc     (Linux/Mac)
    4. 以下の内容を追記する
    [ui]
    username = other
リポジトリの複製(3/3)
   フォルダ構成の確認
    ◦ 758agile
      handson1
        repos    ・・・共有リポジトリ
          .hg
        myself   ・・・自分用リポジトリ
          .hg
        other    ・・・他人のリポジトリ
          .hg    ・・・このリポジトリへの変更はother
                     ユーザー固定
リポジトリの複製(解説)
   以下の事を実施
    ◦ リポジトリの複製を行う。
    ◦ 他人用リポジトリのコミットユーザーを
      リポジトリの設定ファイルを修正し、固
      定化する。
3.Mercurialの使い方


     ユーザー設定
       Mercurialの
      利用ユーザー毎の
       設定を行う。
ユーザー設定(1/3)
 一般的なバージョン管理システムでは
  コミットを行う際に、ユーザー情報の
  入力が必要になります。
 最近のバージョン管理システムでは、
  設定ファイルにて、ユーザー情報を指
  定しておく事で、コミット時にその設
  定情報が自動的にリポジトリへと登録
  されます。
ユーザー設定(2/3)
   Windowsの場合
    ◦ エクスプローラーを使い、Mercurialのイ
      ンストール先から「Mercurial.ini」を
      「%USERPROFILE%」にコピーする。
     インストール先:C:¥Program Files¥Mercurial
   Linux/Macの場合
    1. 以下のコマンドを実行
     touch   ~/.hgrc
ユーザー設定(3/3)
   [ui]セクションに以下の行を追加する。
    メモ帳/vi/emacs等を利用します。
    [ui]
    username = 皆さんのお名前 <e-mail>
   Linux/Macの場合manコマンドでファイ
    ルのフォーマットの仕様が確認出来ま
    す。
    1. 以下のコマンドを実行
    man   hgrc
ユーザー設定(解説)
 利用ユーザー毎の設定ファイルを作
  成・コピーする。
 設定ファイルに利用ユーザー情報を設
  定する。
3.Mercurialの使い方

      ファイルの
      追加・解除
       リポジトリに
     ファイルやフォルダの
      追加・解除を行う。
ファイルの追加・解除(1/4)
   作業場所を移動する。
    1. 以下のコマンドを実行
    cd C:¥TEMP¥758agile¥handson1¥myself
     (Windows)
    cd ~/758agile/handson1/myself (Linux/Mac)
    2. 「aaa.txt」というファイルを作成する
    echo    hogehoge   >   aaa.txt
    3. 以下のコマンドを実行
    hg     status
    hg     st
ファイルの追加・解除(2/4)
   ファイルをリポジトリの管理下に置い
    たり、解除したりする。
    1. 以下のコマンドを実行
    hg   add   aaa.txt
    hg   st
    2. 以下のコマンドを実行
    hg   forget   aaa.txt
    hg   st
ファイルの追加・解除(3/4)
   hgのコマンドは単色表示なので分かり
    にくい。拡張機能を有効にして見やす
    くする。
    1. 以下のファイルをエディタで開く
    notepad %USERPROFILE%¥Mercurial.ini
     (Windows)
    vi ~/.hgrc (Linux/Mac)
ファイルの追加・解除(4/4)
   hgのコマンドは単色表示なので分かり
    にくい。拡張機能を有効にして見やす
    くする。
    2. [extensions]セクションに以下の行を
       追加又はセミコロン(;)を削除して有効
       化する。
      [extensions]
      color =
      [color]
      mode = win32   (Windows)
      mode = ansi    (Linux/Mac)
ファイルの追加・解除(解説)
   以下の事を実施・確認
    ◦ ファイルをリポジトリの管理下に置く、
      管理下から解除する。
    ◦ ファイルの追加時に、statusコマンドが
      どのような表示になるか確認する。
    ◦ 設定ファイルにMercurialのコマンドの実
      行結果をカラー表示にする設定を追加す
      る。
3.Mercurialの使い方

     ファイルの
    コミット・削除
       リポジトリに
       ファイルを
     設定・設定解除する。
ファイルのコミット・削除(1/5)
   ファイルをリポジトリにコミットする。
    1. 以下のコマンドを実行
    hg     add aaa.txt          #リポジトリの管理下に
    hg     st                   #変更ファイルの確認
    hg     commit               #変更分をコミット
    2. 「aaa.txt」の内容を変更する
    echo        ageage   >>   aaa.txt
    3. 以下のコマンドを実行
    hg     st                  #変更ファイルの確認
    hg     ci                  #変更分をコミット
ファイルのコミット・削除(2/5)
   リポジトリのファイル削除
    1. 「bbb.txt」というファイルを作成する
     echo    hogehoge   >   bbb.txt
    2. 以下のコマンドを実行
     hg     add   bbb.txt
     hg     ci
    3. 以下のコマンドを実行
     hg     remove   bbb.txt :リポジトリのファイル
                              削除
     hg     ci
ファイルのコミット・削除(3/5)
   リポジトリのファイルの移動
    1. 「ccc.txt」というファイルを作成する
     echo    hogehoge   >   ccc.txt
    2. 以下のコマンドを実行
     hg     add   ccc.txt
     hg     ci
    3. 以下のコマンドを実行
     hg rename ccc.txt        dir¥ddd.txt   (Windows)
     hg rename ccc.txt        dir/ddd.txt
      (Linux/Mac)
     hg ci
ファイルのコミット・削除(4/5)
   ファイル操作の確認
    1. 「eee.txt」というファイルを作成する
    echo    hogehoge   >   eee.txt
    2. 以下のコマンドを実行
     hg    add   eee.txt
     hg    ci
    3. 以下のコマンドを実行
     del /F eee.txt (Windows)
     rm –f eee.txt (Linux/Mac)
ファイルのコミット・削除(5/5)
   ファイル操作で削除したファイルをリ
    ポジトリの内容で復活させる
    1. 以下のコマンドを実行
    hg   update   -C   -r   tip
    2. 以下のコマンドを実行
    dir   (Windows)
    ls -l (Linux/Mac)
ファイルのコミット・削除(解説)
   以下の事を実施・確認
    ◦ リポジトリにファイルを追加・削除する。
    ◦ リポジトリに追加したファイルを移動す
      る。
    ◦ リポジトリに追加したファイルを、ファ
      イルシステム操作により削除し、update
      コマンドでファイルを復活させる。
3.Mercurialの使い方

    他のリポジトリ
      との同期
      他のリポジトリ
       と同期して
    変更内容を送受信する。
他のリポジトリと同期(1/15)
   フォルダ構成の確認
    ◦ 758agile
      handson1
        repos    ・・・共有リポジトリ
          .hg
        myself   ・・・自分用リポジトリ
          .hg
        other    ・・・他人のリポジトリ
          .hg
他のリポジトリと同期(2/15)
   Diffツールの設定
    1. 以下のファイルをエディタで開く
    notepad %USERPROFILE%¥Mercurial.ini
     (Windows)
    vi ~/.hgrc (Linux/Mac)
    2. 以下の内容を追記する
    [extdiff]
    cmd.winmerge = "C:¥Program
       Files¥WinMerge¥WinMergeU.exe" (Windows)
    cmd.vimdiff = vimdiff (Linux/Mac)
他のリポジトリと同期(3/15)
   Diffツールの設定
    3. 以下の内容を修正する (Windows)
    [merge-tools]
    winmerge.args=/e /x /wl /ub /dl other /dr
       local $other $output $local
    4. 以下の内容を追記する (Linux/Mac)
    [merge-tools]
    vimdiff.args=$local $other $base
    vimdiff.priority=-10
他のリポジトリと同期(4/15)
   これまでの修正内容を確認する。
    1. 以下のコマンドを実行
    hg   log
    hg   log   -l   3
    2. 以下のコマンドを実行
    hg   summary
    hg   sum
他のリポジトリと同期(5/15)
   myselfフォルダの変更内容を共有リポ
    ジトリにpushする。
    1. 以下のコマンドを実行
    hg   outgoing
    hg   out
    2. 以下のコマンドを実行
    hg   push
他のリポジトリと同期(6/15)
   reposフォルダの共有リポジトリの状
    態を確認する。
    1. 新規にターミナルコンソールを起動する
    2. 以下のコマンドを実行
    cd C:¥TEMP¥758agile¥handson1¥repos
     (Windows)
    cd ~/758agile/handson1/repos (Linux/Mac)
    3. 以下のコマンドを実行
    hg   log
他のリポジトリと同期(7/15)
   otherフォルダで共有リポジトリと同
    期する。
    1. 新規にターミナルコンソールを起動する
    2. 以下のコマンドを実行
    cd C:¥TEMP¥758agile¥handson1¥other
     (Windows)
    cd ~/758agile/handson1/other (Linux/Mac)
    3. 以下のコマンドを実行
    hg   log
他のリポジトリと同期(8/15)
   otherフォルダで共有リポジトリと同
    期する。
    5. 以下のコマンドを実行
    hg   incoming
    hg   in
    6. 以下のコマンドを実行
    hg   pull
    hg   update
    hg   pul
他のリポジトリと同期(9/15)
   otherフォルダで変更を行う。
    1. 「123.txt」というファイルを作成する
    echo   hogehoge   >   123.txt
    2. 以下のコマンドを実行
    hg   add 123.txt
    hg   diff             (変更内容を確認する)
    hg   diff | more
他のリポジトリと同期(10/15)
   otherフォルダで変更を行う。
    3. 以下のコマンドを実行
    hg   ci
    hg   in
    hg   out
    hg   push
他のリポジトリと同期(11/15)
   otherフォルダの変更をmyselfフォル
    ダに取り込む。
    1. 「aaa.txt」を変更する
    echo    magemage   >>    aaa.txt
    2. 「fff.txt」というファイルを作成する
    echo    hogehoge   >    fff.txt
    3. 以下のコマンドを実行
     hg    add   fff.txt    (まだコミットしない事)
他のリポジトリと同期(12/15)
   otherフォルダの変更をmyselfフォル
    ダに取り込む。
    4. 以下のコマンドを実行
    hg   in
    hg   pull
    hg   up
    5. 以下のコマンドを実行
    hg   ci
    hg   push
他のリポジトリと同期(13/15)
   myselfフォルダの変更をotherフォル
    ダに取り込む。(マージ)
    1. 「aaa.txt」を変更する
    echo    mogmog   >   aaa.txt
    2. 以下のコマンドを実行
     hg    st
     hg    in
     hg    pull
他のリポジトリと同期(14/15)
   myselfフォルダの変更をotherフォル
    ダに取り込む。(マージ)
    3. 以下のコマンドを実行
    hg   up      (変更内容によってはエラー)
    hg   merge   (変更内容によっては不要)
    hg   ci
    hg   push
他のリポジトリと同期(15/15)
 自分のローカルで未コミットのファイ
  ルがある状態でmerge/updateコマンド
  を実行するのは止めた方が良いです。
 分散バージョン管理の利点の1つとし
  て、自分の変更分のコミットと、他人
  の成果のマージのコミットが分離され
  る事にあると思います。
他のリポジトリと同期(解説)
   以下の事を実施・確認(1/2)
    ◦ merge操作用のマージツールの設定を行う。
    ◦ logコマンドでリポジトリのコミット履歴
      を確認する。
    ◦ summaryコマンドでリポジトリの最新状態
      を確認する。
    ◦ outgoingコマンドでリポジトリ同期先へ
      の送信情報を確認する。
    ◦ pushコマンドでリポジトリを同期する。
他のリポジトリと同期(解説)
   以下の事を実施・確認(2/2)
    ◦ incomingコマンドでリポジトリ同期先か
      らの受信情報を確認する。
    ◦ ローカルに未コミットの変更がある状態
      で、pullコマンドでリポジトリ内容を同
      期する。
    ※通常はpullする前には未コミットの変更はコ
     ミットするなりして、退避して下さい。
    ◦ 1つのファイルを2ユーザーが変更し、
      mergeコマンドが必要になるのを確認する。
3.Mercurialの使い方



      変更を戻す
      リポジトリへの
    変更なかった事にする。
変更を戻す(1/4)
   revertコマンドでコミット前のファイ
    ルを元に戻す。
    1. 「fff.txt」を更新する
    echo   ageage   >>   fff.txt
    2. 以下のコマンドを実行する
    hg revert fff.txt
    more < fff.txt
変更を戻す(2/4)
   rollbackコマンドで過去一回分のコ
    ミットを戻す。
    1. 「fff.txt」を更新する
    echo     ageage   >>   fff.txt
    2. 以下のコマンドを実行する
    hg     ci
    hg     sum
    3. 以下のコマンドを実行する
    hg rollback
    more < fff.txt
変更を戻す(3/4)
   rollbackコマンドで過去一回分のコ
    ミットを戻す。
    4. 以下のコマンドを実行する
    hg   sum
    hg   rollback
変更を戻す(4/4)
   backoutコマンドで指定したコミット
    を打ち消す変更を行う。
    1. 「fff.txt」を更新する
    echo     ageage    >>   fff.txt
    2. 以下のコマンドを実行する
    hg     ci
    hg     sum
    3. 以下のコマンドを実行する
    hg     backout    --merge   -r    [2のコミット番号]
    hg     ci
変更を戻す(確認)
   以下の事を実施・確認する。
    ◦   revertコマンドでコミット前のファイル
        を元に戻す。
    ◦   rollbackコマンドで1回分のコミットを
        元に戻す。一度rollbackすると連続して
        rollbackコマンドが実行できない事を確
        認する。
    ◦   backoutコマンドで指定したコミットを
        打ち消す変更のコミット操作を行う。
3.Mercurialの使い方



    変更履歴を確認
       リポジトリの
     変更履歴を確認する。
変更履歴を確認する(1/5)
   myselfフォルダで変更する。
    1. 「bbb.txt」を変更する
    echo    myself   >>   bbb.txt
    2. 以下のコマンドを実行
     hg    ci
     hg    push
変更履歴を確認する(2/5)
   myselfフォルダで変更を取り込む前に
    otherで変更する。
    1. 「eee.txt」を変更する
    echo    other   >>   eee.txt
    2. 以下のコマンドを実行
     hg    ci
     hg    push
     hg    pul
     hg    push
変更履歴を確認する(3/5)
   変更履歴をグラフィカルに行う
    1. 以下のファイルをエディタで開く
    notepad %USERPROFILE%¥Mercurial.ini
     (Windows)
    vi ~/.hgrc (Linux/Mac)
    2. 以下の内容を追記する
    [extensions]
    graphlog =
    3. 以下のコマンドを実行
    hg glog
変更履歴を確認する(4/5)
   コマンドのデフォルト値の設定
    1. 以下のファイルをエディタで開く
    notepad %USERPROFILE%¥Mercurial.ini
     (Windows)
    vi ~/.hgrc (Linux/Mac)
    2. 以下の内容を追記する
    [defaults]
    glog = -l 3
    3. 以下のコマンドを実行
    hg   glog
変更履歴を確認する(5/5)
   ファイル内で行単位で過去のコミット
    の状態を表示する
    1. 以下のコマンドを実行
    hg   annotate   aaa.txt
変更履歴を確認する(確認)
       以下の事を実施・確認
    ◦   graphlog拡張コマンドを有効にする。
    ◦   glogコマンドの実行結果を確認する。
    ◦   annotateコマンドでファイルの行単位
        でコミットの履歴を確認する。
3.Mercurialの使い方



指定リビジョンに移動
       リポジトリの中
        を移動する。
指定リビジョンに移動(1/2)
   過去のコミットの状態に移動する
    1. 以下のコマンドを実行
    hg   glog
    2. 以下のコマンドを実行
    hg   up -clean   -r   [リビジョン番号]
    hg   glog
    hg   sum
指定リビジョンに移動(2/2)
   過去のコミットの状態に移動する
    1. 「bbb.txt」を変更する
    echo    myself      >>   bbb.txt
    2. 以下のコマンドを実行
     hg    ci
     hg    glog
    3. 以下のコマンドを実行
     hg    merge   -r    [もう一つの分岐先]
     hg    glog
指定リビジョンに移動(確認)
   以下の事を実施・確認
    ◦ updateコマンドで簡単に過去のリビジョ
      ンに戻る事ができるのを確認する。
    ◦ 過去のリビジョンに対して変更・コミッ
      トを行うと、無名ブランチが作成され、
      リポジトリが分岐する事を確認する。
    ◦ mergeコマンドで分岐したリポジトリをま
      た1つにする。
3.Mercurialの使い方


       タグ付け
       リポジトリの
       ある位置に
      タグを付与する。
タグ付け
   tagコマンドを利用する事である時点
    のコミットに名前を付ける事が可能に
    なります。
    1. 以下のコマンドを実行
    hg   tag [タグラベル]
    hg   tags
   tagコマンドの使い所としては、バー
    ジョンの区切りを示すのに使ったりし
    ます。
3.Mercurialの使い方



     エクスポート
      リポジトリの内容
     をファイル出力する。
エクスポート(1/1)
   myselfの内容をZIP書庫に出力する
    1. 以下のコマンドを実行(例:リポジトリ
       全部)
     hg archive -r tip        -t
      zip ../export.zip
    2. 以下のコマンドを実行(例:dddフォルダ
       のみ)
     hg     archive -r tip -t      zip
          ../export.zip -I ./ddd
3.Mercurialの使い方


不要なファイルの除外
     リポジトリの管理外
     にするファイルを
       指定する。
不要なファイルの除外(1/2)
   mergeやupdateコマンドの実行によっ
    て、*.bakや*.origといったファイル
    が増えます。statusコマンドの実行の
    の度にこれらのファイルの表示は邪魔
    なので表示しないようにしましょう。
    1. 以下のコマンドを実行
    cd C:¥TEMP¥758agile¥handson1¥myself
     (Windows)
    cd ~/758agile/handson1/myself (Linux/Mac)
不要なファイルの除外(2/2)
1. 以下のコマンドを実行
 echo   syntax: glob    > .hgignore
2. .hgingoreファイルを開く
 notepad .hgignore      (Windows)
 vi .hgignore           (Linux/Mac)
3. 以下の内容を追記する
 *.bak
 *.orig
4. 正規表現でのフィルタも可能
 http://www.selenic.com/mercurial/hgignore.5.html
不要なファイルの除外(確認)
   以下の事を実施・確認
    ◦ .hgignoreファイルをリポジトリのトップ
      ディレクトリに置く事で、サブフォルダ
      を含めて、ファイルのフィルタが可能に
      なる事を確認する。

Mercurial入門(後半)解説版

  • 1.
    ハンズオンその1 Mercurial入門 名古屋アジャイル勉強会 分科会 開発ツール勉強会#1 Mercurial入門 ハンズオン解説版 2011年12月10日(土) You&I
  • 2.
    3.Mercurialの使い方  今回はシンプルに、以下の構成を構築 し、Mercurialがどのような動作にな るのかを体験して頂きます。 ◦ 中央リポジトリ方式 ◦ ユーザー2人
  • 3.
    3.Mercurialの使い方 リポジトリ (repos) リポジトリ リポジトリ (myself) (other) 作業コピー 作業コピー 分散リビジョン管理方式(中央サーバー利用)
  • 4.
    3.Mercurialの使い方 環境の確認 Mercurialの インストール状況 を確認する。
  • 5.
    環境の確認(1/4)  まずは、ターミナルコンソール・コマ ンドプロンプトを起動しましょう。  以下の指示に従って下さい。 1. 以下のコマンドを実行 hg version 2. 以下のコマンドを実行 hg versio 3. 以下のコマンドを実行 hg vers
  • 6.
    環境の確認(2/4)  このようにMercurialのコマンドは、 コマンドの省略が可能となります。  どこまで省略できるかは、似た名前の コマンドが存在するか否かで決定され ますので、コマンドを実行して覚えま しょう。 1. 以下のコマンドを実行(Windowsのみ) set LANG=ja hg vers
  • 7.
    環境の確認(3/4)  以下の指示に従って下さい。 1. 以下のコマンドを実行 hg help 2. 以下のコマンドを実行 hg help | more  helpコマンドを実行すると、利用可能 なコマンドの一覧が確認出来ます。プ ラグインを有効にすると、利用可能な プラグインも表示されます。
  • 8.
    環境の確認(4/4)  Mercurialのコマンドは、基本的にリ ポジトリが存在するフォルダでのみ実 行が可能なコマンドが殆どです。 1. 以下のコマンドを実行 hg status
  • 9.
    環境の確認(解説)  Mercurialのコマンドについて以下の 事を確認する ◦ Mercurialのコマンドは、省略形がある。 ◦ Mercurialのhelpコマンドの使い方。 ◦ 殆どのMercurialのコマンドは、リポジト リが存在するフォルダ配下でのみ実行可 能である。
  • 10.
    3.Mercurialの使い方 リポジトリの作成 Mercurialの リポジトリ を作成する。
  • 11.
    リポジトリの作成(1/5)  リポジトリの作成前に、まず今回の勉 強会用の作業フォルダを作成します。 1. 以下のコマンドを実行 mkdir C:¥TEMP¥758agile¥handson1 (Windows) mkdir –p ~/758agile/handson1 (Linux/Mac) 2. 以下のコマンドを実行 cd "1の手順のフォルダパス"
  • 12.
    リポジトリの作成(2/5)  リポジトリを作成する 1. 以下のコマンドを実行 hg init repos 2. 以下のコマンドを実行 cd repos 3. 以下のコマンドを実行 dir (Windows) ls -la (Linux/Mac)
  • 13.
    リポジトリの作成(3/5)  リポジトリのある場所でコマンドを実 行する 1. 以下のコマンドを実行 hg status hg st 2. 以下のコマンドを実行 hg summary hg sum
  • 14.
    リポジトリの作成(4/5)  リポジトリの作成はinitコマンドを実 行するだけで可能。  各コマンドの詳細情報はhelpコマンド で調べられます。 1. 以下のコマンドを実行 hg help init hg help [コマンド名]
  • 15.
    リポジトリの作成(5/5)  フォルダ構成の確認 ◦ ~/758agile  handson1  repos  .hg
  • 16.
    リポジトリの作成(解説)  以下の事を実施・確認 ◦ ハンズオン用の作業フォルダ作成。 ◦ ハンズオン用の共有リポジトリ作成。 ◦ リポジトリにはどのようなファイル・ フォルダがあるか確認する。 ◦ リポジトリ配下で実行可能なMercurialの コマンドを確認 ◦ コマンド毎のhelpコマンドの使い方を確 認する。
  • 17.
    3.Mercurialの使い方 リポジトリの複製 リポジトリを複製し 自分の作業スペースを 用意する。
  • 18.
    リポジトリの複製(1/3)  リポジトリを複製するに辺り、作業場 所を移動する。 1. 以下のコマンドを実行 cd C:¥TEMP¥758agile¥handson1 (Windows) cd ~/758agile/handson1 (Linux/Mac)  リポジトリを複製する。 1. 以下のコマンドを実行 hg clone repos myself (自分用) hg clone repos other (他人用)
  • 19.
    リポジトリの複製(2/3)  リポジトリを複製する。 3. 以下のファイルをエディタで開く notepad .¥other¥.hg¥hgrc (Windows) vi ./other/.hg/hgrc (Linux/Mac) 4. 以下の内容を追記する [ui] username = other
  • 20.
    リポジトリの複製(3/3)  フォルダ構成の確認 ◦ 758agile  handson1  repos ・・・共有リポジトリ  .hg  myself ・・・自分用リポジトリ  .hg  other ・・・他人のリポジトリ  .hg ・・・このリポジトリへの変更はother ユーザー固定
  • 21.
    リポジトリの複製(解説)  以下の事を実施 ◦ リポジトリの複製を行う。 ◦ 他人用リポジトリのコミットユーザーを リポジトリの設定ファイルを修正し、固 定化する。
  • 22.
    3.Mercurialの使い方 ユーザー設定 Mercurialの 利用ユーザー毎の 設定を行う。
  • 23.
    ユーザー設定(1/3)  一般的なバージョン管理システムでは コミットを行う際に、ユーザー情報の 入力が必要になります。  最近のバージョン管理システムでは、 設定ファイルにて、ユーザー情報を指 定しておく事で、コミット時にその設 定情報が自動的にリポジトリへと登録 されます。
  • 24.
    ユーザー設定(2/3)  Windowsの場合 ◦ エクスプローラーを使い、Mercurialのイ ンストール先から「Mercurial.ini」を 「%USERPROFILE%」にコピーする。 インストール先:C:¥Program Files¥Mercurial  Linux/Macの場合 1. 以下のコマンドを実行 touch ~/.hgrc
  • 25.
    ユーザー設定(3/3)  [ui]セクションに以下の行を追加する。 メモ帳/vi/emacs等を利用します。 [ui] username = 皆さんのお名前 <e-mail>  Linux/Macの場合manコマンドでファイ ルのフォーマットの仕様が確認出来ま す。 1. 以下のコマンドを実行 man hgrc
  • 26.
    ユーザー設定(解説)  利用ユーザー毎の設定ファイルを作 成・コピーする。  設定ファイルに利用ユーザー情報を設 定する。
  • 27.
    3.Mercurialの使い方 ファイルの 追加・解除 リポジトリに ファイルやフォルダの 追加・解除を行う。
  • 28.
    ファイルの追加・解除(1/4)  作業場所を移動する。 1. 以下のコマンドを実行 cd C:¥TEMP¥758agile¥handson1¥myself (Windows) cd ~/758agile/handson1/myself (Linux/Mac) 2. 「aaa.txt」というファイルを作成する echo hogehoge > aaa.txt 3. 以下のコマンドを実行 hg status hg st
  • 29.
    ファイルの追加・解除(2/4)  ファイルをリポジトリの管理下に置い たり、解除したりする。 1. 以下のコマンドを実行 hg add aaa.txt hg st 2. 以下のコマンドを実行 hg forget aaa.txt hg st
  • 30.
    ファイルの追加・解除(3/4)  hgのコマンドは単色表示なので分かり にくい。拡張機能を有効にして見やす くする。 1. 以下のファイルをエディタで開く notepad %USERPROFILE%¥Mercurial.ini (Windows) vi ~/.hgrc (Linux/Mac)
  • 31.
    ファイルの追加・解除(4/4)  hgのコマンドは単色表示なので分かり にくい。拡張機能を有効にして見やす くする。 2. [extensions]セクションに以下の行を 追加又はセミコロン(;)を削除して有効 化する。 [extensions] color = [color] mode = win32 (Windows) mode = ansi (Linux/Mac)
  • 32.
    ファイルの追加・解除(解説)  以下の事を実施・確認 ◦ ファイルをリポジトリの管理下に置く、 管理下から解除する。 ◦ ファイルの追加時に、statusコマンドが どのような表示になるか確認する。 ◦ 設定ファイルにMercurialのコマンドの実 行結果をカラー表示にする設定を追加す る。
  • 33.
    3.Mercurialの使い方 ファイルの コミット・削除 リポジトリに ファイルを 設定・設定解除する。
  • 34.
    ファイルのコミット・削除(1/5)  ファイルをリポジトリにコミットする。 1. 以下のコマンドを実行 hg add aaa.txt #リポジトリの管理下に hg st #変更ファイルの確認 hg commit #変更分をコミット 2. 「aaa.txt」の内容を変更する echo ageage >> aaa.txt 3. 以下のコマンドを実行 hg st #変更ファイルの確認 hg ci #変更分をコミット
  • 35.
    ファイルのコミット・削除(2/5)  リポジトリのファイル削除 1. 「bbb.txt」というファイルを作成する echo hogehoge > bbb.txt 2. 以下のコマンドを実行 hg add bbb.txt hg ci 3. 以下のコマンドを実行 hg remove bbb.txt :リポジトリのファイル 削除 hg ci
  • 36.
    ファイルのコミット・削除(3/5)  リポジトリのファイルの移動 1. 「ccc.txt」というファイルを作成する echo hogehoge > ccc.txt 2. 以下のコマンドを実行 hg add ccc.txt hg ci 3. 以下のコマンドを実行 hg rename ccc.txt dir¥ddd.txt (Windows) hg rename ccc.txt dir/ddd.txt (Linux/Mac) hg ci
  • 37.
    ファイルのコミット・削除(4/5)  ファイル操作の確認 1. 「eee.txt」というファイルを作成する echo hogehoge > eee.txt 2. 以下のコマンドを実行 hg add eee.txt hg ci 3. 以下のコマンドを実行 del /F eee.txt (Windows) rm –f eee.txt (Linux/Mac)
  • 38.
    ファイルのコミット・削除(5/5)  ファイル操作で削除したファイルをリ ポジトリの内容で復活させる 1. 以下のコマンドを実行 hg update -C -r tip 2. 以下のコマンドを実行 dir (Windows) ls -l (Linux/Mac)
  • 39.
    ファイルのコミット・削除(解説)  以下の事を実施・確認 ◦ リポジトリにファイルを追加・削除する。 ◦ リポジトリに追加したファイルを移動す る。 ◦ リポジトリに追加したファイルを、ファ イルシステム操作により削除し、update コマンドでファイルを復活させる。
  • 40.
    3.Mercurialの使い方 他のリポジトリ との同期 他のリポジトリ と同期して 変更内容を送受信する。
  • 41.
    他のリポジトリと同期(1/15)  フォルダ構成の確認 ◦ 758agile  handson1  repos ・・・共有リポジトリ  .hg  myself ・・・自分用リポジトリ  .hg  other ・・・他人のリポジトリ  .hg
  • 42.
    他のリポジトリと同期(2/15)  Diffツールの設定 1. 以下のファイルをエディタで開く notepad %USERPROFILE%¥Mercurial.ini (Windows) vi ~/.hgrc (Linux/Mac) 2. 以下の内容を追記する [extdiff] cmd.winmerge = "C:¥Program Files¥WinMerge¥WinMergeU.exe" (Windows) cmd.vimdiff = vimdiff (Linux/Mac)
  • 43.
    他のリポジトリと同期(3/15)  Diffツールの設定 3. 以下の内容を修正する (Windows) [merge-tools] winmerge.args=/e /x /wl /ub /dl other /dr local $other $output $local 4. 以下の内容を追記する (Linux/Mac) [merge-tools] vimdiff.args=$local $other $base vimdiff.priority=-10
  • 44.
    他のリポジトリと同期(4/15)  これまでの修正内容を確認する。 1. 以下のコマンドを実行 hg log hg log -l 3 2. 以下のコマンドを実行 hg summary hg sum
  • 45.
    他のリポジトリと同期(5/15)  myselfフォルダの変更内容を共有リポ ジトリにpushする。 1. 以下のコマンドを実行 hg outgoing hg out 2. 以下のコマンドを実行 hg push
  • 46.
    他のリポジトリと同期(6/15)  reposフォルダの共有リポジトリの状 態を確認する。 1. 新規にターミナルコンソールを起動する 2. 以下のコマンドを実行 cd C:¥TEMP¥758agile¥handson1¥repos (Windows) cd ~/758agile/handson1/repos (Linux/Mac) 3. 以下のコマンドを実行 hg log
  • 47.
    他のリポジトリと同期(7/15)  otherフォルダで共有リポジトリと同 期する。 1. 新規にターミナルコンソールを起動する 2. 以下のコマンドを実行 cd C:¥TEMP¥758agile¥handson1¥other (Windows) cd ~/758agile/handson1/other (Linux/Mac) 3. 以下のコマンドを実行 hg log
  • 48.
    他のリポジトリと同期(8/15)  otherフォルダで共有リポジトリと同 期する。 5. 以下のコマンドを実行 hg incoming hg in 6. 以下のコマンドを実行 hg pull hg update hg pul
  • 49.
    他のリポジトリと同期(9/15)  otherフォルダで変更を行う。 1. 「123.txt」というファイルを作成する echo hogehoge > 123.txt 2. 以下のコマンドを実行 hg add 123.txt hg diff (変更内容を確認する) hg diff | more
  • 50.
    他のリポジトリと同期(10/15)  otherフォルダで変更を行う。 3. 以下のコマンドを実行 hg ci hg in hg out hg push
  • 51.
    他のリポジトリと同期(11/15)  otherフォルダの変更をmyselfフォル ダに取り込む。 1. 「aaa.txt」を変更する echo magemage >> aaa.txt 2. 「fff.txt」というファイルを作成する echo hogehoge > fff.txt 3. 以下のコマンドを実行 hg add fff.txt (まだコミットしない事)
  • 52.
    他のリポジトリと同期(12/15)  otherフォルダの変更をmyselfフォル ダに取り込む。 4. 以下のコマンドを実行 hg in hg pull hg up 5. 以下のコマンドを実行 hg ci hg push
  • 53.
    他のリポジトリと同期(13/15)  myselfフォルダの変更をotherフォル ダに取り込む。(マージ) 1. 「aaa.txt」を変更する echo mogmog > aaa.txt 2. 以下のコマンドを実行 hg st hg in hg pull
  • 54.
    他のリポジトリと同期(14/15)  myselfフォルダの変更をotherフォル ダに取り込む。(マージ) 3. 以下のコマンドを実行 hg up (変更内容によってはエラー) hg merge (変更内容によっては不要) hg ci hg push
  • 55.
    他のリポジトリと同期(15/15)  自分のローカルで未コミットのファイ ルがある状態でmerge/updateコマンド を実行するのは止めた方が良いです。  分散バージョン管理の利点の1つとし て、自分の変更分のコミットと、他人 の成果のマージのコミットが分離され る事にあると思います。
  • 56.
    他のリポジトリと同期(解説)  以下の事を実施・確認(1/2) ◦ merge操作用のマージツールの設定を行う。 ◦ logコマンドでリポジトリのコミット履歴 を確認する。 ◦ summaryコマンドでリポジトリの最新状態 を確認する。 ◦ outgoingコマンドでリポジトリ同期先へ の送信情報を確認する。 ◦ pushコマンドでリポジトリを同期する。
  • 57.
    他のリポジトリと同期(解説)  以下の事を実施・確認(2/2) ◦ incomingコマンドでリポジトリ同期先か らの受信情報を確認する。 ◦ ローカルに未コミットの変更がある状態 で、pullコマンドでリポジトリ内容を同 期する。 ※通常はpullする前には未コミットの変更はコ ミットするなりして、退避して下さい。 ◦ 1つのファイルを2ユーザーが変更し、 mergeコマンドが必要になるのを確認する。
  • 58.
    3.Mercurialの使い方 変更を戻す リポジトリへの 変更なかった事にする。
  • 59.
    変更を戻す(1/4)  revertコマンドでコミット前のファイ ルを元に戻す。 1. 「fff.txt」を更新する echo ageage >> fff.txt 2. 以下のコマンドを実行する hg revert fff.txt more < fff.txt
  • 60.
    変更を戻す(2/4)  rollbackコマンドで過去一回分のコ ミットを戻す。 1. 「fff.txt」を更新する echo ageage >> fff.txt 2. 以下のコマンドを実行する hg ci hg sum 3. 以下のコマンドを実行する hg rollback more < fff.txt
  • 61.
    変更を戻す(3/4)  rollbackコマンドで過去一回分のコ ミットを戻す。 4. 以下のコマンドを実行する hg sum hg rollback
  • 62.
    変更を戻す(4/4)  backoutコマンドで指定したコミット を打ち消す変更を行う。 1. 「fff.txt」を更新する echo ageage >> fff.txt 2. 以下のコマンドを実行する hg ci hg sum 3. 以下のコマンドを実行する hg backout --merge -r [2のコミット番号] hg ci
  • 63.
    変更を戻す(確認)  以下の事を実施・確認する。 ◦ revertコマンドでコミット前のファイル を元に戻す。 ◦ rollbackコマンドで1回分のコミットを 元に戻す。一度rollbackすると連続して rollbackコマンドが実行できない事を確 認する。 ◦ backoutコマンドで指定したコミットを 打ち消す変更のコミット操作を行う。
  • 64.
    3.Mercurialの使い方 変更履歴を確認 リポジトリの 変更履歴を確認する。
  • 65.
    変更履歴を確認する(1/5)  myselfフォルダで変更する。 1. 「bbb.txt」を変更する echo myself >> bbb.txt 2. 以下のコマンドを実行 hg ci hg push
  • 66.
    変更履歴を確認する(2/5)  myselfフォルダで変更を取り込む前に otherで変更する。 1. 「eee.txt」を変更する echo other >> eee.txt 2. 以下のコマンドを実行 hg ci hg push hg pul hg push
  • 67.
    変更履歴を確認する(3/5)  変更履歴をグラフィカルに行う 1. 以下のファイルをエディタで開く notepad %USERPROFILE%¥Mercurial.ini (Windows) vi ~/.hgrc (Linux/Mac) 2. 以下の内容を追記する [extensions] graphlog = 3. 以下のコマンドを実行 hg glog
  • 68.
    変更履歴を確認する(4/5)  コマンドのデフォルト値の設定 1. 以下のファイルをエディタで開く notepad %USERPROFILE%¥Mercurial.ini (Windows) vi ~/.hgrc (Linux/Mac) 2. 以下の内容を追記する [defaults] glog = -l 3 3. 以下のコマンドを実行 hg glog
  • 69.
    変更履歴を確認する(5/5)  ファイル内で行単位で過去のコミット の状態を表示する 1. 以下のコマンドを実行 hg annotate aaa.txt
  • 70.
    変更履歴を確認する(確認)  以下の事を実施・確認 ◦ graphlog拡張コマンドを有効にする。 ◦ glogコマンドの実行結果を確認する。 ◦ annotateコマンドでファイルの行単位 でコミットの履歴を確認する。
  • 71.
    3.Mercurialの使い方 指定リビジョンに移動 リポジトリの中 を移動する。
  • 72.
    指定リビジョンに移動(1/2)  過去のコミットの状態に移動する 1. 以下のコマンドを実行 hg glog 2. 以下のコマンドを実行 hg up -clean -r [リビジョン番号] hg glog hg sum
  • 73.
    指定リビジョンに移動(2/2)  過去のコミットの状態に移動する 1. 「bbb.txt」を変更する echo myself >> bbb.txt 2. 以下のコマンドを実行 hg ci hg glog 3. 以下のコマンドを実行 hg merge -r [もう一つの分岐先] hg glog
  • 74.
    指定リビジョンに移動(確認)  以下の事を実施・確認 ◦ updateコマンドで簡単に過去のリビジョ ンに戻る事ができるのを確認する。 ◦ 過去のリビジョンに対して変更・コミッ トを行うと、無名ブランチが作成され、 リポジトリが分岐する事を確認する。 ◦ mergeコマンドで分岐したリポジトリをま た1つにする。
  • 75.
    3.Mercurialの使い方 タグ付け リポジトリの ある位置に タグを付与する。
  • 76.
    タグ付け  tagコマンドを利用する事である時点 のコミットに名前を付ける事が可能に なります。 1. 以下のコマンドを実行 hg tag [タグラベル] hg tags  tagコマンドの使い所としては、バー ジョンの区切りを示すのに使ったりし ます。
  • 77.
    3.Mercurialの使い方 エクスポート リポジトリの内容 をファイル出力する。
  • 78.
    エクスポート(1/1)  myselfの内容をZIP書庫に出力する 1. 以下のコマンドを実行(例:リポジトリ 全部) hg archive -r tip -t zip ../export.zip 2. 以下のコマンドを実行(例:dddフォルダ のみ) hg archive -r tip -t zip ../export.zip -I ./ddd
  • 79.
    3.Mercurialの使い方 不要なファイルの除外 リポジトリの管理外 にするファイルを 指定する。
  • 80.
    不要なファイルの除外(1/2)  mergeやupdateコマンドの実行によっ て、*.bakや*.origといったファイル が増えます。statusコマンドの実行の の度にこれらのファイルの表示は邪魔 なので表示しないようにしましょう。 1. 以下のコマンドを実行 cd C:¥TEMP¥758agile¥handson1¥myself (Windows) cd ~/758agile/handson1/myself (Linux/Mac)
  • 81.
    不要なファイルの除外(2/2) 1. 以下のコマンドを実行 echo syntax: glob > .hgignore 2. .hgingoreファイルを開く notepad .hgignore (Windows) vi .hgignore (Linux/Mac) 3. 以下の内容を追記する *.bak *.orig 4. 正規表現でのフィルタも可能 http://www.selenic.com/mercurial/hgignore.5.html
  • 82.
    不要なファイルの除外(確認)  以下の事を実施・確認 ◦ .hgignoreファイルをリポジトリのトップ ディレクトリに置く事で、サブフォルダ を含めて、ファイルのフィルタが可能に なる事を確認する。