При клонировании Mercurial репозитория через HTTP в среде Windows я получаю следующий результат:Mercurial блокировки при клонировании через файловую систему
hg clone http:/myserver/hg/repo hgcopy
requesting all changes
adding changesets
adding manifests
adding file changes
added xxx changesets with xxx changes to 92985 files
updating to branch default
92985 files updated, 0 files merged, 0 files removed, 0 files unresolved
Cloning над файловой системой, то есть через общий сетевой диск, дают полное отличается выход:
c:\Hg>hg clone \\server\Hg\Repo c:\Hg\Repo
copying [ <=> ] 23712
updating to branch default
92985 files updated, 0 files merged, 0 files removed, 0 files unresolved
Эта последняя операция 3x раз быстрее, но создает файл блокировки в удаленный репозиторий, что делает невозможным запуск второго клона из другой системы. Mercurial docs about Locking Design не раскрывает много информации об этом:
Возможные проблемы могут возникнуть, если считыватель читает файлы не по порядку. Например, копирование репозитория с другими инструментами (например, rsync) во время pull или commit может привести к тому, что копирование списка изменений относится к записи манифеста, которая не находится в копии.
Итак, какой механизм происходит при клонировании по файловой системе?