Разница между клонированием и копированием в Mercurial

Скопирует ли каталог .hg в другой каталог так же, как клонирование в Mercurial (используя TortoiseHg, хотя я думаю, что это не имеет значения) или команда cloning в Mercurial делает что-то особенное во время этого процесса?

Ответ 1

Это почти то же самое. Клонирование делает несколько вещей по-другому, ни один из которых не требуется, но некоторые из них круты:

  • клоны также получают рабочий каталог (чего вы можете избежать с помощью -U)
  • Клоны получают исходное репо, заданное по умолчанию для push/pull в файле .hg/hgrc.
  • клоны могут получить только подмножество оригинала (clone -r X получает ревизию X и только всех предков)
  • Клоны используют hardlinks, когда файловая система поддерживает его

Это последнее довольно круто. Это означает, что если у меня есть 200-Гбайт репо, и я делаю clone -U src dest, я получаю полный клон, который вообще не использует никакого дискового пространства! Если я пропущу -U, я получаю рабочую копию, которая занимает пробел, и по мере того, как два клона начинают расходиться, новый начинает занимать место, но базовый clone -U мгновенно и без дискового пространства в современном файле системы. Это неверно для копии (что тоже очень хорошо работает).