GitとSVNの差異

はじめまして gumiの金男と申します。

僕はpython、Git、Djangoを使った経歴はそんなに長くないです。
今まではjava, svn, mvc フレームワークを使ったプロジェクトに参加した経験が多かったです。
Djangomvc基盤のフレームワークなので初めて勉強するのにも関わらず理解するのに助かりました。
今回話してみたいのはgitの関してです。

今までプロジェクトのソース管理はSVNを利用したことが多かったのでGitとSVNは何が違うか
ずっと気になりました。
なので、以下の二つをちょっと調べて見ました。

1.GitとSVNの差異
2.Gitのpushとcommitの差異
ーーーーーーーーーーーーーーーーーーーーーー

1.GitとSVNの差異
GitがSVNより良い点
Git(ぎっと)は分散型バージョン管理システムです。
修正内容を毎回マスタの貯蔵所にコミットしなくても進めるのが便利でした。
SVNはバージョン管理のために作成したコードを必ずコミットしなければならないし、修正内容が他のメンバの作業に悪い影響がある場合もあります。
Gitを使用すると他の開発者が自分用のサンドボックスを持って作業を進めるし作業が完了したら変更内容をマスタの貯蔵所にアップ(push)するのが可能です。

Gitはプロジェクトの情報を保存するために一つのディレクトリを利用します。SVNは全てのディレクトリに「.svn」フォルダを持つ必要がありますが、Gitはcheckoutしたルートディレクトリに一つの「.git」フォルダを使用するように単純化しました。この方法はファイルを移動する際ファイルの内訳を壊さないままファイルを移動する時に良いです。

Gitはファイルをプロジェクトフォルダの何処にあるか位置を探さずにファイルの内容を把握しているので名前を変更したり位置を移動したりしてもファイルの内訳は壊れないです。 そしてBranchがより軽く作られます。SVNの場合はTrunk(作業スペース)とBranchなどがあります。

Gitは実際SVNとともに運用することもできます。GitにはコミットをSVNに再同期(re-sync)する機能があります。
個人的にはGitとともにSVNを使って見たいです。
以下はGit関連資料です。
http://www.eecs.harvard.edu/~cduan/technical/git/
http://git-scm.com/documentation
http://git.or.cz/gitwiki/GitFaq
http://www.gitready.com/intermediate/2009/01/31/intro-to-rebase.htm
http://git.or.cz/gitwiki/GitCheatSheet

2.gitのpushとcommitの差異
SVNはcommitをすると中央repositoryに変更内容が保存されるが、gitはlocal repositoryがあるために、gitでのcommitはlocal repositoryに保存されますが、これを
remoto repositoryに保存するためにpushをする必要があります。

※indexとlocal repositoryの差分はgit diff --cachedでとれます。

Gitでは内部インデックスを使用して貯蔵所にあるファイル及びディレクトリの状態を追跡する。そしてファイル及びディレクトリに対して変更内容が適用されたオブジェクトが保存されるため後でのアップデートが簡単にできます。


以上、Gitに関して自分が気になった部分をちょっと調べて見ました。
プロジェクトでソース管理の方法は色々あると思いますが、これからはGitの色んな機能を活用してソース管理を行いと思います。