tortoise hgのすすめ
Post on 25-Jun-2015
1.172 Views
Preview:
TRANSCRIPT
2013/12/13 Rev.16
TortoiseHg のすゝめ
鈴木 聡
2013/12/13 Rev.16
まずは、
「バージョン管理システム」のおさらい
2013/12/13 Rev.16
● 「バージョン管理システム」とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのシステム。
● 特にソフトウェア開発において「ソースコードの管理」に用いられることが多い。
Wikipedia 2013年4月13日 (土) 09:26 版より引用
バージョン管理システムとは?VCS: Version Control System
2013/12/13 Rev.16
代表的な VCS 一覧
CVSCVSVSSVSS
(Visual Source (Visual Source Safe)Safe)
SubversionSubversion GitGit MercurialMercurial
初版リリース 19901990年年 19941994年年 20002000年年 20052005年年 20052005年年
リポジトリリポジトリ方式方式 集中集中 集中集中 集中集中 分散分散 分散分散
※ リポジトリ : ソースコードの変更情報を記録したデータベースのこと。
2013/12/13 Rev.16
「集中型」バージョン管理
とは?
2013/12/13 Rev.16
集中型バージョン管理
● 1台の中央サーバにリポジトリを保持
● 管理対象であるソースコードのみ、クライアントPCに取得する
● ソースの変更履歴を参照する場合などには、サーバにアクセスしながら動作
2013/12/13 Rev.16
集中型 VCS の図
2013/12/13 Rev.16
集中型 VCSチェックアウト
リポジトリサーバー
クライアントPC
check out
2013/12/13 Rev.16
集中型 VCSコミット・アップデート
リポジトリサーバー
クライアントPC
commit(check in)
update
2013/12/13 Rev.16
「分散型」バージョン管理
とは?
2013/12/13 Rev.16
分散型バージョン管理
● リポジトリの全データをローカル PC にコピー
● リポジトリのコピー後はローカル PC のみで動作
– ソースコードはローカル PC のリポジトリからチェックアウトする
– コミット(チェックイン)もローカル PC のリポジトリに
● リポジトリを持った PC は、サーバ・クライアントどちらにもなれる
2013/12/13 Rev.16
分散型 VCS の図
2013/12/13 Rev.16
分散型 VCSクローン
PC
clone
Server
2013/12/13 Rev.16
分散型 VCSチェックアウト
PC
check out
2013/12/13 Rev.16
分散型 VCSコミット
PC
Commit(check in)
2013/12/13 Rev.16
分散型 VCSリポジトリ同期
Server
push
pull
PC
2013/12/13 Rev.16
分散型 VCS の利点 (1)
● ローカル PC にコミットできる– 変更点を気軽にコミットできる– 「集中型」で頻繁に発生する「他の人とソースコードの変更が衝突してコミットできない・・・」という心配は無用
– 「コミット後にマージ」という使い方ができる
● マージ作業を何度でもやり直せる
2013/12/13 Rev.16
分散型 VCS の利点 (2)
● サーバとネットワークで接続されていない状態でも動作
– サーバへのアクセスが必要ないため・・・● 変更履歴の閲覧● ファイル内の変更部分の検索・・・などの動作が速い
2013/12/13 Rev.16
分散型 VCS の利点 (3)
● ファイル経由でもリポジトリ同期が可能– メールの送受信できれば、添付ファイル経由でリビジョンの受け渡しが可能
2013/12/13 Rev.16
Office BOffice A
ファイルを用いた同期の図
Bundlefile
2013/12/13 Rev.16
ここまでのバージョン管理の話を
踏まえて、TortoiseHg の話に。
2013/12/13 Rev.16
TortoiseHg とは?(トータス エイチ・ジー)
● 「分散型バージョン管理システム」である Mercurial(マーキュリアル)の GUI フロントエンド
● Windows / Mac OS X / Linux / FreeBSD / Solaris … など多くの環境で動作– TortoiseHg は Python + Qt で実装されている
● GPL v2 ライセンスのフリーソフト
2013/12/13 Rev.16
TortoiseHgワークベンチ画面
2013/12/13 Rev.16
TortoiseHg のすゝめ (1)
● CVS や Subversion など、既存の VCS に動作が近い– Git は固有のクセが多い
● シンプルなワークフロー– 「名前なしブランチ」による平行開発– TortoiseHg(Mercurial)では「コミット」するだけで勝手にブランチします
2013/12/13 Rev.16
2人の開発者が別々にコミットすると・・・
↑「Rev.1」に対して2人の開発者が別々の変更をコミットした場合リビジョングラフ
※ グラフとは、リビジョンの家系図
2013/12/13 Rev.16
これをマージして統合する
2013/12/13 Rev.16
ブランチによる平行開発
● 他の開発者の影響を受けずに開発を進められる
● 「名前なしブランチ」に慣れたら、「名前付きブランチ」を使った開発にシフト
● ブランチパターンの適用– 徐々に平行開発を安全に進められるようになる
2013/12/13 Rev.16
マージは大丈夫?
● マージ時に変更が衝突した場合、マージ作業に多くの工数が必要なのでは?– 既存 VCS でマージのつらさを痛感
ブランチを多用した開発は不安・・・
2013/12/13 Rev.16
「分散型」で強化されたマージ機能
● 分散型バージョン管理では「3way マージ」でマージが行われるため、VCS による自動マージの精度が向上している
3way マージ:
「マージ対象の2つのリビジョン」と「ブランチ元リビジョン」、計3つのリビジョンの情報を使用してマージする
2013/12/13 Rev.16
分散型 VCS ではマージしても大丈夫です
● 今まで苦労してマージしていたのは、既存 VCS のデキが悪かっただけ
● 分散型 VCS を使ってもマージが大変な場合は・・・– おそらく、ソースコードのデキが悪い
● 「変更が局所化できていない」のでしょうから、リファクタリングしましょう。
2013/12/13 Rev.16
TortoiseHg のすゝめ (2)
● 強力な「リビジョン改変」機能– GUI で簡単にリビジョンの移動、圧縮、削除ができる
2013/12/13 Rev.16
リビジョン改変機能
● リビジョンの修正(Amend)– コミットのやり直し
● リビジョンの移動(Rebase)– リビジョンを別の位置に移動
● リビジョンの移植(Graft)– 別のブランチに 3way マージ用いて移植
● リビジョンの圧縮– 2つ以上のリビジョンを1つにまとめる
2013/12/13 Rev.16
TortoiseHg のすゝめ (3)
● Git にも実装されていない機能も– Large Files
● 巨大なバイナリファイルはオンデマンドで取得
– Shelve● 変更点を一時的に避けておいて、後で元に戻す
(2013年11月に実装された最新機能なので TortoiseHg では、まだ使えません・・・)
● TortoiseHg 固有の Shelve 機能は使えます
– Changesets Evolution● 「チェンジセットの削除」を別リポジトリに伝搬する
2013/12/13 Rev.16
おすすめ書籍
● 入門 TortoiseHg + Mercurial
秀和システム
2013/2/27 発売
2,200円
2013/12/13 Rev.16
最新情報 (1)
2013/12/13 Rev.16
最新情報 (2)
● Twitter ハッシュタグ
#mercurialjp
● Mercurial 日本語ユーザグループ– https://groups.google.com/forum/?fromgroups#!forum/mercurial-ja
2013/12/13 Rev.16
いつ使うの?
● おそらく、技術的な障壁は無いハズ
● 使う気になれば、すぐに導入できる
● まずは、「集中型」として使用するのもアリ。– 「マージ機能の強化」や「動作が速い」という恩恵は受けられる
2013/12/13 Rev.16
TortoiseHg を使いましょう!!!
2013/12/13 Rev.16
TortoiseHg を導入した後は・・・
2013/12/13 Rev.16
構成管理パターンを使った開発
● ブランチを用いた「構成管理パターン」– Main line– Task Branch– Release Line– 3rd Party Codeline
2013/12/13 Rev.16
A successfulGit branching model
2013/12/13 Rev.16
さらなる開発効率の向上
これらのパターンを用いて、ソフトウェアの開発効率を向上させましょう!!!
2013/12/13 Rev.16
Appendix
2013/12/13 Rev.16
Mercurial とは?
● Pythonで実装されているコマンドライン ツール
● 元々は Linux カーネルのソースコード管理に使用するために開発が始まった
● Go言語, Illumos/OpenIndiana, Mozilla, Netbeans, OpenJDK,Python, Vim … 等のプロジェクトにて使用
2013/12/13 Rev.16
Mercurial の略称はなぜ Hg ?
● 英語の Mercury が水銀を意味し、その元素記号が Hg であることに由来。
2013/12/13 Rev.16
分散型 VCS が開発された理由
● Linux カーネルの開発過程で「大規模なソフトウェアを、複数の開発者で並行開発するための手法」が確立されていった。(2002年~2005年)
● Linux カーネルの開発で使用するために「分散型 VCS」の開発(※1)が行われた(2005年~)– 「大規模なソフトウェアを、複数の開発者で並行開発する」ために最良のツールが作成された
2013/12/13 Rev.16
Git 派の方にはSourceTree がオススメ
top related