Git派の@srockstyleです。SVNとの違いをその場で説明できないことが多いので、エントリーにまとめつつ整理していきたいと思います。もし間違っていること書いてたら指摘してもらえるとうれしいです。
SVNとGitの言葉でいう違い
大きく分けると以下の違いになります。まずこれはざっくりです。
- Git:分散型管理
- SVN:集中型管理
SVNのような集中型管理は、コミットのたびにサーバにあるメインリポジトリにアクセスします。コミット、ブランチの切り替え、ブランチの作成のたびにサーバにアクセスし、作業します。これが集中型管理です。
Gitのような分散型管理は自分のところにソースコード含め履歴をすべてクローン(複製)します。その上で自分のローカルでコミット、ブランチの切り替え、ブランチの作成を行い、作業が終わったらリモートリポジトリにプッシュします。
SVNよりGitがよいところ
複数人で開発するときに便利なのがGitです。
一人で開発するのであればSVNでも「まだ」大丈夫なの「かも」しれません。
ブランチを切る作業が超絶高速にできるからです。ローカルに自分だけのリポジトリを持ち、それをリモートリポジトリにプッシュするので、いちいちリモートにアクセスする作業が必要ありません。一人でやっているとその辺の恩恵をうけれないので、「SVNでもええやんけ」って言われると「うーん」ってなってしまいます。僕はそうでした。
集中型だとブランチをきっても、サーバに変更が加わるので、不具合のあるソースをアップしてしまうと、全員に影響がでます。駄目ですね。それに反してローカルのブランチで作業を行い、きちんとテストまでした上でプッシュできます。そう、Gitならね。
学習コストって高いの?
学習コストがーという話、よく聞きますが僕は正直学習するためのコストはコマンドいくつか覚えられればよいのでそんなに高くないと思ってます。あと考え方かな。考え方も分散型ですよーぐらいなので。
上に書いた考え方と、コマンドでいうなら
[bash]
git clone(リポジトリをクローン)
git add .(ファイルを追加
git commit (ローカルでコミット)
git push origin ブランチ名(ブランチにプッシュ)
git branch ブランチ名(ブランチを作成
git checkout ブランチ名(ブランチを移動)
git merge ブランチ名(ブランチをマージ)
git pull(ソースコードの変更をローカルにもってくる)[/bash]
ぐらいしっておけばなんとかなるんじゃないでしょうか。そんな多くないですね。git mergeとかは多分メインエンジニアになるひとが使うぐらいかと思うので。masterにプッシュするとかね。
あとはgit reverseとかfetchとかありますがその辺の詳細はまたそのうち。pull requestとかも。
まとめ
SVNからGitへの移行はコマンドがあるらしいです。移行の検証も今度やってみるので、できたらまたブログエントリに書きますね。
ではでは。