2011年11月08日
Mercurial 2.0
Mercurial の2.0がリリースされていた。
大きな変更点の1つとして、 LargefilesExtension があった。
これは、うれしいので、試してみた。
$ mkdir repoA $ cd repoA $ hg init
で次のようにやってみる。これまで通りのadd
dd if=/dev/urandom of=thisfileislarge count=20000 hg add thisfileislarge hg commit -m 'add' i=1 while [ $i -le 10 ]; do dd if=/dev/urandom of=thisfileislarge count=20000 hg commit -m 'update $i' i=`expr $i + 1` done
「thisfileislarge: 指定ファイルの管理には 30 MBを超えるメモリが必要です」などと言われる。
$ du -k 4 ./.hg/cache 0 ./.hg/largefiles 110008 ./.hg/store/data 110024 ./.hg/store 110056 ./.hg 120060 .
でかい。
まずは、lfconvertを試す。
$ hg lfconvert --size 5 repoA repoB
size指定の単位はMB。
$ du -k repoB 110000 repoB/.hg/largefiles 4 repoB/.hg/store/data/~2ehglf 4 repoB/.hg/store/data 20 repoB/.hg/store 110036 repoB/.hg 110036 repoB
largefilesというディレクトリができている。
これをclone
$ hg clone repoB repoC ブランチ default へ更新中 ファイル状態: 更新数 1、 マージ数 0、 削除数 0、 衝突未解消数 0 getting changed largefiles 1 largefiles updated, 0 removed
$ du -k repoC 8 repoC/.hg/cache 10004 repoC/.hg/largefiles 4 repoC/.hg/store/data/~2ehglf 4 repoC/.hg/store/data 16 repoC/.hg/store 10048 repoC/.hg 4 repoC/.hglf 20052 repoC
小さい。
$ cd repoC $ hg update -r 5 ファイル状態: 更新数 1、 マージ数 0、 削除数 0、 衝突未解消数 0 getting changed largefiles 1 largefiles updated, 0 removed
$ du -k 8 ./.hg/cache 20004 ./.hg/largefiles 4 ./.hg/store/data/~2ehglf 4 ./.hg/store/data 16 ./.hg/store 20048 ./.hg 4 ./.hglf 30052 .
必要な分だけ、持ってくるようだ。 いいかも。