ksaitoの日記

日々試したことの覚え書き

バージョン管理システムのリポジトリサイズ3

移転しました。

自動的にリダイレクトします。

サイズの大きなテキストファイルに繰り返し小さな修正を加えた時のリポジトリの増加です。
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
$