入門Git を読んだ

仕事で、Git を使ってパッチ管理しよう、的な話が出たため、GWの予定もないし、せっかくなのでgitを勉強することに。
今まで積読してた「入門Git」を読んだ。

入門git

入門git



入門Gitを一読しても、自分にはいまいちピンとこなかった。
SVNと考え方が大きく違うので、それに慣れるまでに時間がかかるみたいで。

まず、SVNのチェンジセットにあたる概念は、Gitではコミットだと思うのだけれど、IDがハッシュになっている。

また、ブランチはコミットがシーケンシャルに並んだもの、という捉え方をするっぽい。
ちなみに、コミットは、ハンク(hunk)の集合で成り立っている。ハンクとは、ある連続した修正点のことらしい。
(コミットは、diffファイルのイメージで、ハンクはdiffのうち、1つの変更箇所 を示す単位と考えればいいと思います。)

これらの概念の関係を図に整理すると、以下のような感じ。(多重度は省きました。おそらく、すべての関連で m対n になると思う。)




感想ですが、自分はコミット名(リビジョン番号みたいなもの)がハッシュであるのに、なかなか慣れなかった。
第5章くらいで、マージをする段階になると、多分ハッシュであることの意味が分かると思う。
コミットの順序をコミットした後で入れ替えるっていう発想は、SVNではできないね。
あと、複数のコミットを1つのコミットに圧縮するってのは、いままでもやりたいと思ってたので、便利そうだという実感はわいた。

とりあえず、使えるようになった気がする。
難しいけど、便利そうってことだけは確か。


でも、submoduleとか、高度な機能はしばらく使わない気がするから、理解するのをあきらめました。



ちなみに、SCMに慣れてない人(ブランチを切ったりしたことのない人)は、この本を読む前に、「Subversion実践入門」を読んで、SCMとは何かを理解しておいた方が良いと思う。

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

その上で、分散バージョン管理の基本的な考え方を、以下の記事を読んで、つかんでおいた方が良いと思う。

分散バージョン管理入門 (イラスト入り) - tcha.org

ポイントは、「変更」というものの捉え方が、Gitと従来のSCMとで大きく異なる点です。