エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Gitの実力を測る

仕事のプロジェクトではバージョン管理にCVSを使っています。すっかり時代遅れの感が拭えません。
これをGitに置き換えたとして、実際に運用できるレベルになるのか、調べてみました。

なぜ他のVCSでなくGitなのか、という話は保留ということで。

ここで環境A/Bは実際にプロジェクトで使われていた環境です。

環境A 環境B
ファイルサイズ合計 約1.2GB 約2.8GB
ファイル数 約39,000 約69,000
内(リソースフィアルなどを除いた)ソースファイルの数 約21,000 約40,000
ソース行数合計 約1,060万行 約2,000万行
リポジトリサイズ 約248MB 約600MB
git add(全ファイルの追加) 27分 47分
git commti(上記のaddに対する) 5分 14分
git branch(新しいブランチの作成) 0秒 0秒
git checkout(上記のブランチへの移動) 10秒 27秒
git add(上記のブランチ上で編集後) 0秒 0秒
git status 11秒 27秒
git commit(上記のaddに対する 7秒 36秒
git merge(上記のブランチを元のブランチにマージ) 9秒 17秒
  • Hardware
    • Dell Dimension DXC061
    • Intel Core2 2.13GHz
    • RAM 2.00 GB
    • HDD:WD3200AAKS-75SBA0
  • Software
  • 行数はテキスト行数(空行、コメントのみの行を含みます)
  • 時間はtimeコマンドで計測しました
  • 時間は概数です。またあくまで計測した結果で、同時に動いているソフトなどの影響で大きく変化します
  • ファイルの変更は、20個ほどのソースファイルの水平タブを空白文字に置き換える、というものです。


実際に動かしてみた感じとしては、環境Aぐらいの規模であれば運用できそうな感じです。環境Bは不可能とはいえないものの、かなり扱いにくくなります。
ただどちらの環境でも、ローカルでの運用や、リモートへのpush/リモートからのpullといった差分のやりとりだけならまだしも、環境一式を取り扱う場合はやはりかなり面倒です。ファイルのコピーだけで30分から一時間かかります(外付けHDDならもっとかかるでしょう)。


ローカルにリポジトリがあるので開発しているサブシステムの中でマメに変更をコミットできるとか、他のサブシステムの開発をしている別のチームと試作のコードをやり取りをする場合も、単にファイルを送るよりも間違いが少ないなど、メリットは大きいと思うのですが、さすがにこのサイズのまま扱うのは不便をともなうことになりそうです。


Gitへの置き換えを考える場合、利用者には集中型から分散型への頭の切り替えを求めることになりますが、加えて運用そのものを見直す必要がありそうです。