サイズの大きなテキストファイルに繰り返し小さな修正を加えた時のリポジトリの増加です。
Gitは、リポジトリにスナップショットを保管するので差分は少量でもファイル数に応じてサイズが大きくなります。
他のツールは、リポジトリに差分を保管するので差分が少量であれば、リポジトリのサイズも小さいです。
もともと、コンセプトが違うので一概に、どちらが良いとは言えません。
Gitは、Linuxカーネルの開発を支えているだけあって、多機能、高速で分散した開発者が同じコミット番号が厳密に同じブランチを指していることを保証するといったプログラミングで重要となる特性を持っています。
Subversion
サイズの大きなテキストファイルには、bashをダンプしたテキストを使います。
Subversionに追加&コミットして一文字追加してコミットを繰り返します。
$ bash --version bash --version GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. $ svn --version --quiet 1.6.6 $ svnadmin create svn-repo $ svn co file://`pwd`/svn-repo svn Checked out revision 0. $ od -cx `type -p bash` > bash.txt od -cx `type -p bash` > bash.txt type -p bash $ svn add bash.txt A bash.txt $ svn commit -m "init" svn commit -m "init" 追加しています bash.txt ファイルのデータを送信しています . リビジョン 1 をコミットしました。 $ for i in $(seq 1 100) > do > echo $i >> bash.txt > svn commit -m "add $i" > /dev/null 2>&1 > du -sk ../svn-repo > done > ../size.log $
git
gitでも同じことをしてリポジトリのサイズを測定します。
$ git --version --quiet git version 1.7.0.4 $ git init git Initialized empty Git repository in /tmp/git/.git/ $ cd git $ od -cx `type -p bash` > bash.txt $ git add bash.txt $ git commit -m "init" [master (root-commit) 7130887] init 1 files changed, 112749 insertions(+), 0 deletions(-) create mode 100644 bash.txt $ for i in $(seq 1 100); do echo $i >> bash.txt; git commit -a -m "add $i" > /dev/null 2>&1; du -sk .git; done > ../size-git.log $
Mercurial
Mercurialも同様…
$ hg --version --quiet Mercurial - 分散構成管理ツール(バージョン 1.4.3) $ hg init hg $ cd hg $ od -cx `type -p bash` > bash.txt $ hg add bash.txt $ hg commit -m "init" $ for i in $(seq 1 100); do echo $i >> bash.txt; hg commit -m "add $i" > /dev/null 2>&1; du -sk .hg; done > ../size-hg.log $
Bazaar
これも同じ
$ bzr version --short 2.1.1 $ bzr init bzr Created a standalone tree (format: 2a) $ cd bzr $ od -cx `type -p bash` > bash.txt $ bzr add bash.txt adding bash.txt $ bzr commit -m "init" Committing to: /home/ksaito/work/vcs/size/bzr/ added bash.txt Committed revision 1. $ for i in $(seq 1 100); do echo $i >> bash.txt; bzr commit -m "add $i" > /dev/null 2>&1; du -sk .bzr; done > ../size-bzr.log $