未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

入門Gitを読んだ

入門GitはGitのメンテナである濱野さんが書いただけあってGitの本質がわかりやすく記されている。

バージョン管理システム(VCS--Version Control System)としてCVSSubversion(SVN)があるし、分散型VCSとしては、Git以外にもいろいろあるが、まあGitでいいのではないかと。なんといってもLinuxで利用されているという圧倒的な実績。数千人規模のプロジェクトで利用できるスケーラビリティ。そのような規模では、もはやSVNのような集中型VCSではスケールしないというのはあきらかだろう。

VCSの解説は、細かい機能というよりも、そのツールを利用してのプロセスやワークフローあるいは利用しているコミュニティの文化なんていうものを、わたしは理解したいので、その意味で本書は濱野さんの経験からでる貴重なノウハウがつまっている。

Gitなどを使った共同開発の基本的な開発ワークフローは、共有レポジトリをコピーして(git clone)、機能追加やらなにやらをして、テストし、変更を記録して(git commit)、最終的に共有レポジトリにアップ(git push)みたいなものになる。機能追加にしろ、バグ修正にしろ、それぞれの作業はブランチを作ってそこで行うというのが基本だ。ローカルのマシンにあるレポジトリにどんどんコミットしていって、ある塊で共有レポジトリと同期をとる。ローカルのレポジトリへのコミットは中央のレポジトリとはまったく非同期で行えるし、メンテナの許可が必要と言うわけでもないので、自由に行える。コミットに対する精神的敷居は非常に低い。

SVNなどで最新版へのupdateをしたところ、自分が今まで開発していたコードと一緒になってしまって、わけがわからなくなったという経験を持つ人にとって、『gitでの分散開発のモデルでは「まず自分の変更はローカルにコミットして安全に保存しておいて、他所からの変更と統合を、マージしたりリベースしたりして行なう。変更競合にしくじったとしても、安全に保存してあるコミットから何度でもやり直すことができる」というワークフローを取るので、一般にこうした危険がずっと少なくなっています』277ページというような指摘や、「上流からのバグ修正は?(215ページ)」で『上流からのトピックに統合したがる人がいますが、これはトピックブランチを持つワークフローがまだ正しく身についていないあかしです』というあたりは、上級プログラマにとっても参考になるのではないだろうか。

9章「変更履歴を追いかける」、10章「パッチベースのワークフロー」、13章「リモートレポジトリ定義」、15章「歴史の2分探索」、16章「間違いからの回復」、18章「リポジトリの出版公開」などなど濱野さんのgitプロジェクトでの経験がにじみ出ていて大変参考になる。

入門GitはCVSSVNを日頃使っているプログラマにこそおすすめの良書である。



誤植:

III
誤:2007年の7月末
正:2005年の7月末

64ページ
誤:版管理対象となっているのすべての
正:版管理対象となっているすべての

85ページ
誤:一意には決定できるないので
正:一意には決定できないので

151ページ
誤:記録したコミットを元に、バッチを出力して
正:記録したコミットを元に、パッチを出力して

185ページ
誤:(17)が無視されない
正:(17)が無視される

231ページ
誤:コミットAにいたる歴史がすべてコミットBにいたる
正:コミットBにいたる歴史がすべてコミットAにいたる