読者です 読者をやめる 読者になる 読者になる

SCMBootCamp in Tokyo 2 でMercurialのサポーターをしてきました。

mercurial scmbc

SCMBootCamp in Tokyo 2(scmbc)でMercurialのサポーターという事でサポーターをしてきました。

主催者のid:kyon_mmさん、サポーターの皆さん、参加者の皆さんお疲れさまでした。

代表的なまとめはこちら。

今日の時点でSCMBC #2についてはたくさん振り返りエントリが出てきていますので、このエントリではMercurialサポーターのノウハウを共有したいと思います。

SCMBCの実習は3部に分かれています。今回の僕のグループでは次の様な内容で演習をしてもらいました。

演習1

自己紹介

各演習テーブルで自己紹介しましょう。忘れてなし崩しに演習に入らないように。twitterアカウントを教えてもらってフォローするといろいろ円滑に進みます。

bitbucketのアカウント作成
  • bitbucketのアカウント作成
  • 中央リポジトリの作成(参加者にお願いする)
  • 中央リポジトリの権限追加(参加者にお願いする)

Oracleさんのゲスト用無線LANはhg serveでサーバが立てられません。
中央リポジトリの用意や中央リポジトリへのpushの為のアカウント管理にbitbucketを利用するといろいろ便利なので参加者には必ずbitbucketのアカウントを作成してもらいましょう。

Mercurialの使い方 一人編
  • 必要最低限のhgrcの設定(ui.username)
  • hg init
  • hg add
  • hg commit
  • hg diff
  • hg revert
  • hg update
  • hg rollback
  • hg revert
  • hg log(glog)
  • hg merge

協調作業をする前にまずMercurialの操作法に慣れてもらいましょう。一人で使う場合のコマンドはsvncvsとだいたい同じです。

あと、1度は無理矢理マルチプルヘッドを作ってマージしてもらいましょう。

演習1で 伝えるべきノウハウ
  • グラフの見方
  • Mercurial拡張の設定(Graphlog)

リビジョングラフを見ながらhgの操作を行うと、自分の実行した操作がリポジトリにどのような影響を与えているかわかりやすいです。

必ず、GUIMercurialクライアント(tortoisehg, machg, sourcetree, hgview)か、Graphlog拡張を有効にしてもらい、リビジョングラフの見方、マルチプルヘッドの見方などを思えてもらいましょう。

演習2

Mercurialの使い方 マルチプルヘッド地獄編
  • hg clone
  • hg pull
  • hg merge (--tool=internal:merge)
  • hg resolve (-l -m -u)
  • hg update -C
  • hg push

演習1で作成した中央リポジトリを使ってみんなで作業してもらいます。

1ファイルをみんなで編集するので、マルチプルヘッドによるマージ地獄、コンフリクト地獄になります。ここでマルチプルヘッドのマージ方法や、コンフリクト解決方法を体験してもらいましょう。

伝えるべきノウハウ
  • マージの仕方
  • コンフリクトマーカーの見方
  • コンフリクト解決方法

マージの仕方、コンフリクトマーカーの見方(local, otherなど)を覚えてもらいましょう(おもったけど、入門資料にコンフリクトマーカーの見方って必要だよね。)

あと、サポーターも注意なのですが、コンフリクト時に勝手にvimdiffやwinmergeが立ち上がって四苦八苦する事が有ります。
その場合は、参加者に次のコマンドを使ってマージしてもらいます。

$ hg merge --tool=internal:merge

演習3

Mercurialの使い方 チケット駆動開発編
  • hg branch
  • hg update BRANCH_NAME
  • hg merge BRANCH_NAME
  • hg push --new-branch

マルチプルヘッド地獄を体験してもらうと、参加者の方は「もうMercurialじゃなくてSubversionでいいや」って気持ちになってしまいます。

が、名前付きブランチを使ったチケット駆動開発を採用すると急に使いやすくなります。

SCMBC #2の僕のテーブルでは次の様に作業してもらいました。

$ hg branch
defualt
$ hg branch issueN
$ hg commit -m "start issueN branch"
$ (何か作業)
$ hg commit
(コメントを入力)
$ hg update default
$ hg pull
$ hg merge issueN
$ hg commit -m "merge with issueN"
$ hg push

名前無しブランチをマージする場合と比べ、名前付きブランチ切って、作業して、マージするという一連の流れはマージの意義がちゃんと有ります。

マルチプルヘッド地獄の時のマージは不条理に感じますが、名前付きブランチのマージは合理的な操作なのでストレスも少ないようです。

ちなみに、演習2のマルチプルヘッド地獄の場合でも上級者はMQ拡張やRebase拡張などを駆使してサクサク歴史を一直線にします。
サクサク一直線に出来るようになったら、SCMBCでMercurialのサポーター出来ます!

伝えるべきノウハウ
  • 名前付きブランチのマージの方法

名前付きブランチのマージ方法を体験してもらいます。自分が今どのブランチに居て、どのブランチをマージするのかを意識してもらいます。

リビジョングラフを見ながら自分の位置と相手の位置を確認してもらうと良いでしょう。

その他の話題

  • 上司の説得方法
  • 実際のMercurialの運用方法
  • 不要なマージコミットの減らし方などの運用テクニック
  • Mercurial拡張の使いこなし方
    • バンドルされている拡張
    • バンドルされていない拡張

これらの事が教えられたらもっといいなーと。でもSCMBCではなくDVCS塾っぽい内容?ですね。

サポーターががんばりたい点

  • サポーターはGUIクライアントの使い方を覚える

GUIクライアントの使い方にサポーターが習熟していないので四苦八苦しました。tortoisehg、machg、sourcetreeの使い方とか。

  • サポーターは様々なマージツールの使い方を覚える

マージツールも様々です。3-wayマージツールとか、使い慣れてないと何をどうしたらいいのかわからなくなる。僕araxis mergeしか使えないです><

演習内容が本当にプログラマ向けなのでデザイナーさんにはちょっと敷居が高いです。何とかしたい。

ごめんなさい、コマンドライン使ってください!と割り切るなら、演習で利用するコマンド集(cd, lsなどなど)が有ったら良かったかも。

社内SCMBCやりたい人、未来のサポーター、これからSCMBCに参加したい人へ

SCMBCのサポーターの役割について、雰囲気を掴んでもらえたのではないでしょうか。

社内SCMBCをやりたい人は、だいたいこんな演習をやればMercurialについて学んでもらえると思います。社内SCMBCが出来たら是非SCMBC in Tokyoで一緒にMercurialのサポーターをやりましょう。

これからSCMBCに参加したい人はSCMBCに来ればこれだけの事が体験できます。一人で勉強するのもいいですが、DVCSでは複数人で協調作業をしなければ体験できないことがたくさんあります。SCMBCではその体験が出来ます。

たった2回のノウハウですが、参考になれば幸いです。