SVNを使っていた人向けのクッソ簡単なGit解説

ようやく自分の中でGitのイメージができたので、今更ながら簡単な解説を書きます。
SVN(Subversion)を使ったことがある人向けです。

まず、読み方がわからないともやもやする。
Gitと書いて「ギット」と読む。「ジット」と読む人もいるけど、正しくはギットらしい。

SVNのおさらい。
SVNサーバーというコンピュータに「リポジトリ」があり、そこに今までのソースの履歴などがまとまっている。
利用者はリポジトリから自分のパソコンにソースを「チェックアウト」する。
チェックアウトされたソースは自分専用のファイルなので好きに編集してよい。
ソースを修正したら「コミット」して、変更点をリポジトリに反映させる。
チェックアウトされたソースを「更新」すると、他の人がコミットした変更を取り込める。
なお、SVNサーバーをわざわざ建てるのが面倒な人は、パソコン内に「ローカルリポジトリ」を作ってSVNサーバーの代わりにできる。このローカルリポジトリは他のユーザーが参照したり変更したりはできない。

ここまでが理解できていれば、Gitも言葉が変わっただけで理解できるはずだ。

どこかのコンピュータに「リモートリポジトリ」があり、そこに今までのソースの履歴などがまとまっている。
利用者はリポジトリから自分のパソコンにリポジトリを「クローン」する。
SVNはソースをコピーするだけだったが、Gitはリポジトリそのものをコピーする。)
ソースを修正したら、このローカルリポジトリに「コミット」する。この時点ではリモートリポジトリは変更されない。
ローカルリポジトリからリモートリポジトリに「プッシュ」することで、リモートリポジトリに変更が伝わる。
「プル」すると、リモートリポジトリの変更をローカルリポジトリに取り込める。

簡単に言えば、

  • チェックアウト → クローン
  • コミット → コミット&プッシュ
  • 更新 → プル

と読み替えればとりあえず問題ない。

Gitを使うと便利なところ。
SVNでチームで開発する場合、コミットすると他の人にもすぐ影響が出てしまう。
これは自分だけの修正だからコミットできないんだけど、ずっと手持ちするのしんどいなぁ。履歴管理したいなぁ。という時、Gitはありがたいだろう。

また、同期がわりと速い(気がする)。
詳しい仕組みを理解しているわけではないが、SVNの場合サーバーとローカルの通信はリポジトリ vs ソースでいちいち翻訳しなければならないのに対して、Gitの場合はリポジトリ vs リポジトリのため翻訳がいらず速いのではなかろうか。(その分、ローカルでコミットするという一手間が加わるのだけれど)

SVNはサーバーが絶対的にエラかった。ソースは一時的に貸し出されるもので、コミットされない変更に意味はなかった。
Gitのリモートとローカルのリポジトリは対等である。チームで開発する以上、どこかにソースを集めるのは必要なことだが、メインのサーバーが壊れた場合、誰かのローカルリポジトリがサーバー役を担ってもよい。メインサーバーが復旧したら、臨時に受け取った変更点をプッシュすればよいのだ。おお、地方分権
(なお、TortoiseGitの「バックグラウンド稼働(Daemon)」で簡易サーバーになるが、セキュリティ上の制限でPushは受け付けないようだ。gitコマンドの --enable=recieve-packを指定すれば受け付ける模様)