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