2016-11-22 4 views
0

При клонировании 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 может привести к тому, что копирование списка изменений относится к записи манифеста, которая не находится в копии.

Итак, какой механизм происходит при клонировании по файловой системе?

ответ

1

Это не следы стекол, они просто обычные.

Mercurial блокирует исходный репозиторий при использовании «быстрой копии» с помощью копирования или жесткой ссылки точно , потому что не использует более медленный «протокол выталкивания». Вы можете запустить:

hg clone --pull \\server\Hg\Repo c:\Hg\Repo 

заставить Mercurial использовать протокол тянуть в любом случае: см hg help --verbose clone подробности. Это будет медленнее, чем прямая копия, хотя, вероятно, не так медленно, как клонирование через http или https (так как HTTP требует передачи всех данных через ваш веб-сервер).

Смежные вопросы