Mercurial はバイナリファイル処理がいまいちという 噂をよく見るので,比べてみた。面倒臭いから, bsdusersに出したやつをpreで。
結果はMercurialの圧勝。ただ,メモリを食うので100MBを超えるような ファイルは,4〜5倍時間がかかっても subversion の方がいいかも。
下記註: 「容量比較」の項目について,
hgは,リポジトリと作業ディレクトリが同居しています。
du -sk hg はその合計値が出て,リポジトリ容量は hg/.hg のほうです。
----------------------------------------------------------------------
-rw-r--r-- 2 yuuji wheel 4190486 Mar 2 18:20 file1.tar.gz
という4MBのファイルを import & checkout
で実験。
●一発目の取り込み
[svn]
% time svn -m initial-import import $svn/file
Adding (bin) file1.tar.gz
Committed revision 1.
svn -m initial-import import $svn/file 2.39s user 0.06s system 97% cpu 2.520 total
[hg]
firestorm{yuuji}% time hg ci -m Initial-import [/opt/tmp/scmtest/hg]
hg ci -m Initial-import 0.65s user 0.11s system 96% cpu 0.784 total
●チェックアウト後の容量
[svn]
firestorm{yuuji}% du -sk svn svnrepo [/opt/tmp/scmtest]
8248 svn
4186 svnrepo
合計: 12434
[hg]
firestorm{yuuji}% du -sk hg [/opt/tmp/scmtest]
8232 hg (合計)
(うち hg/.hg は 4118)
●file1をちょびっと更新
-rw-r--r-- 1 yuuji wheel 4190544 Mar 2 18:27 file1.tar.gz
●コミット
[svn]
firestorm{yuuji}% time svn ci -m update-file1 [/opt/tmp/scmtest/svn]
Sending file1.tar.gz
Transmitting file data .
Committed revision 2.
svn ci -m update-file1 0.89s user 0.11s system 81% cpu 1.232 total
[hg]
firestorm{yuuji}% time hg ci -m update-file1 [/opt/tmp/scmtest/hg]
hg ci -m update-file1 0.68s user 0.12s system 98% cpu 0.816 total
●容量比較
% cd ..
[svn]
% du -sk svn svnrepo [/opt/tmp/scmtest]
8248 svn
7116 svnrepo
合計: 15364 (増加 2930)
[hg]
% du -sk hg [/opt/tmp/scmtest]
11192 hg
(うちhg/.hg は 7078 で 増加 2960)
●さらにfile1をちょびっと更新
-rw-r--r-- 1 yuuji wheel 4190555 Mar 2 18:42 file1.tar.gz
●コミット
[svn]
firestorm{yuuji}% time svn ci -m update-file1-2 [/opt/tmp/scmtest/svn]
Sending file1.tar.gz
Transmitting file data .
Committed revision 3.
svn ci -m update-file1-2 0.79s user 0.13s system 67% cpu 1.362 total
[hg]
firestorm{yuuji}% time hg ci -m update-file1-2 [/opt/tmp/scmtest/hg]
hg ci -m update-file1-2 0.39s user 0.13s system 92% cpu 0.562 total
●容量比較
% cd ..
[svn]
% du -sk svn svnrepo [/opt/tmp/scmtest]
8248 svn
10046 svnrepo (増加 2930)
[hg]
11208 hg
(うちhg/.hg は 7094 で 増加 16)
16kしか増えてないのはかなり効率的
●もっと大きなファイルを足してみよう
(116MBのファイル)
116 -rw-r--r-- 1 yuuji wheel 121057339 Mar 19 2006 ul-emacs.tar.bz2
% svn add --auto-props ul-emacs.tar.bz2 [/opt/tmp/scmtest/svn]
A (bin) ul-emacs.tar.bz2
[hg]
% hg add ul-emacs.tar.bz2 [/opt/tmp/scmtest/hg]
ul-emacs.tar.bz2: files over 10MB may cause memory and performance problems
(use 'hg revert ul-emacs.tar.bz2' to unadd the file)
ん???? 10MB以上はダメ?
●コミット
% time svn ci -m 116MB-file-added [/opt/tmp/scmtest/svn]
Adding (bin) ul-emacs.tar.bz2
Transmitting file data .
Committed revision 4.
svn ci -m 116MB-file-added 68.98s user 1.94s system 94% cpu 1:14.96 total
1分14秒…遅い
[hg]
firestorm{yuuji}% time hg ci -m 116MB-file-added [/opt/tmp/scmtest/hg]
** unknown exception encountered, details follow
** report bug details to http://www.selenic.com/mercurial/bts
** or mercurial@selenic.com
** Mercurial Distributed SCM (version 0.9.5)
Traceback (most recent call last):
File "/usr/local/mercurial/bin/hg", line 14, in ?
mercurial.dispatch.run()
エラーでこけたーーーーーーーーーーー!
とおもったけど,limitを拡げたら通った。
% limit datasize
datasize 128MB
% limit datasize 666m
% limit datasize
datasize 666MB
●コミット
firestorm{yuuji}% time hg ci -m 116MB-file-added [/opt/tmp/scmtest/hg]
hg ci -m 116MB-file-added 15.59s user 2.32s system 81% cpu 22.108 total
22秒。速い上に問題なし。 (svnは 74.96 total)
●容量比較
% cd ..
% du -sk svn svnrepo [/opt/tmp/scmtest]
244794 svn
128000 svnrepo
% du -sk hg [/opt/tmp/scmtest]
365402 hg
(うち hg/.hg は 242920 で増加 117920)
●大きめのファイルをちょびっと変更(圧縮し直した)
116 -rw-r--r-- 2 yuuji wheel 121148496 Mar 2 19:15 ul-emacs.tar.bz2
●コミット
[svn]
% time svn ci -m 116MB-file-updateed [/opt/tmp/scmtest/svn]
Sending ul-emacs.tar.bz2
Transmitting file data .
Committed revision 5.
svn ci -m 116MB-file-updated 30.95s user 3.05s system 77% cpu 43.782 total
さっき(74秒)よりは速い
[hg]
こけたー,limit datasize 800m でやりなおし。
firestorm{yuuji}% time hg ci -m 116MB-file-updated [/opt/tmp/scmtest/hg]
hg ci -m 116MB-file-updated 20.67s user 2.71s system 86% cpu 27.092 total
27秒。
●ではでかいファイル込でチェックアウト
firestorm{yuuji}% time svn co $svn/file svn-co-large [/opt/tmp/scmtest]
A svn-co-large/file1.tar.gz
A svn-co-large/ul-emacs.tar.bz2
Checked out revision 5.
svn co $svn/file svn-co-large 33.32s user 1.96s system 76% cpu 46.207 total
firestorm{yuuji}% time hg clone hg hg-clone-large [/opt/tmp/scmtest]
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
hg clone hg hg-clone-large 3.88s user 2.60s system 61% cpu 10.545 total
4倍以上速い。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb