mercurialでgit new-workdir
ローカルのリポジトリをコピーするための専用のコマンドはmercurialには無い。*1 単にcloneすればよい。
hg clone <repository> <new_workdir_path>
追記: git new-workdirは.git以下のファイル郡をsymlinkで共有しているので、元のリポジトリのコミットがnew_workdirでも参照できるが、hg cloneの場合は完全に別リポジトリということに注意。
速度
git new-workdirはsymlinkを使うことによってcpより早いよ、という話。 mercurialの場合、ローカルリポジトリのクローン時には(unix系OSでもwindowsでも)hard linkが利用されるため、cpより早い。
% hg version | head -n1 Mercurial Distributed SCM (version 2.7) % time (hg clone rhodecode-enterprise rhodecode-enterprise-clone) updating to branch default 1852 files updated, 0 files merged, 0 files removed, 0 files unresolved ( hg clone rhodecode-enterprise rhodecode-enterprise-clone; ) 1.53s user 1.15s system 42% cpu 6.394 total % time (cp -R rhodecode-enterprise rhodecode-enterprise-cp) ( cp -i -R rhodecode-enterprise rhodecode-enterprise-cp; ) 0.13s user 2.46s system 16% cpu 15.331 total
この例では2.5倍くらいcloneの方が早い
ちなみに
hg clone だと作業領域が作られる(ファイルが展開される)ので、作りたくない場合は次のコマンドを利用しよう
% hg clone -U <src> <dest> # クローン時に作業領域を作らない % hg update null # リポジトリの作業領域を消す