hbstudy#33のMercurialハンズオンに参加してきました

はい、とてつもなく久しぶりのブログです。最近ブログネタになるようなことをほとんどしていませんです。

4/28(土)に開催された hbstudy #33 に参加してきたので、レポート的なものを書いておこうかと思います。

バージョン管理の必要性

  • ファイルの変更の5w1h(いつ、どこで、だれが、何を、なぜ、どうやって)がわかる

バージョン管理が必要なファイル

  • サーバの設定ファイル
  • デプロイスクリプト
  • 環境構築のためのプロビジョニングスクリプト
  • ドキュメント

など編集するものすべて

バージョン管理すると

  • 変更の経緯がわかる
    • セットアップが職人技じゃなくなる
  • どのファイルが変更されたかすぐにわかる
  • .bakとかできなくなる
    • 心の平穏w

インフラ向きのバージョンな管理システムは

  • git
    • [o] 手軽にバージョン管理
    • [o] 他のサーバと履歴を共有
    • [o] チェンジセット
    • [o] ブランチ
    • [x] コマンド体型が他と違う(モヒカン向け)
    • [x] Windowsで使うにはmsysが必要
  • Mercurial
    • [o] 手軽にバージョン管理
    • [o] 他のサーバと履歴を共有
    • [o] チェンジセット
    • [o] ブランチ
    • [o] Windowsサポート
    • [x] githubをサポートしていない

どこででも使えるMercurialいいよ!!
癖も少ないし!

Mercurial

  • Mercurial = 水銀
    • なのでコマンドは hg (元素記号)

分散バージョン管理システム

  • 手軽にバージョン管理
    • あとからサーバを準備して、他サーバとの共有も可
  • ローカルコミット
  • 手軽なブランチングと安全なマージ
    • コミット済みの変更をマージするので安心

特徴

  • gitに比べてシンプル
    • リビジョングラフがすべて
    • 分岐はブランチ
  • エクステンション
    • pythonで拡張可能
    • 便利な機能はエクステンションなので、有効にしないとダメ(同梱されているものもすべて無効化されている)
    • 履歴改変系もエクステンション
  • 安全な履歴管理
    • 履歴は神聖
    • 改変可能かどうかを示す phase という安全弁
    • 危険な履歴改変はエクステンションを有効にする必要あり
      • rebase, transplant, mq

履歴改変

履歴改変はpushしていないもののみ可能
→ push 後は誰が触っているかわからない
  • コミットログをあとから変更
  • コミット忘れの追加など
  • コミットを移動する

用語など

資料を参照

ハンズオン

各自で進めましょう!

  1. 課題のダウンロード
  2. おすすめ.hgrcをベースに.hgrc設定
  3. 基本操作
  4. リポジトリサーバを使う

基本操作

  • Blockdigのリポジトリをcloneして、ログやリビジョングラフを見てみる
    • 深夜2時過ぎにcommitしてる!
  • 課題用ディレクトリでリポジトリを作成
    • hg init
  • 今あるファイルをリポジトリに追加
    • status -> add -> status -> commit -> status
  • 少しずつファイルを変更しながら、コマンドの使い方を覚える
    • 編集 -> diff -> status -> commit
  • (直前の)コミットの取り消し
    • commit -> rollback -> revert
      • 直前以前のコミットを取り消すにはbackuoutを使う
  • マルチプルヘッドを作る
    • prarentsで現在のリビジョンを確認(Nとする)
    • 編集 -> commit -> update N -> 編集 -> commit -> update N -> 編集 -> commit -> glog でリビジョングラフを確認
  • マルチプルヘッドをマージ
    • merge
      • ヘッドが3つ以上ある場合は merge REV のようにリビジョン番号を指定する
    • マージしたらコミット
    • マージツールが起動してしまう場合は update --clean で元に戻して、 merge --tool=internal:merge をする
  • マージの取り消し
    • update --clean

リポジトリサーバを使う

  • 簡易的にサーバを起動
    • リポジトリのあるディレクトリで hg serve
      • 8000ポートでサーバが起動
    • pull, push, cloneを試す

hgrcの内容はこんな感じで

[web]
    allow_push = *
    push_ssl = False
  • コンフリクトさせたり解決したり

このへんで時間切れと相成りました。


講師の troter さんとサポートで来て下さっていた方々、heartbeatsの皆様、お疲れ様でした!
懇親会も含めて、楽しめました。

※相変わらず、まとまりもなく、資料を見れば書いてあることばかりですが、大目に見てください。