При клонировании репозитория с помощью команды
hg clone A B
mercurial сначала пытается создать жесткие ссылки для файлов внутри папки .hg в новом репозитории. Это ускоряет клонирование и экономит место на жестком диске.
Жесткие ссылки поддерживаются файловыми системами Linux и Windows NTFS. Для файловых систем, которые не поддерживают жесткие ссылки (например Windows FAT), а также при клонирование через http/https или ssh с удаленного сервера mercurial полностью копирует все файлы.
Для того, чтобы mercurial создал независимый клон репозитория, можно вручную указать параметр --pull:
hg clone --pull A B
При коммите или отправке изменений (push) в репозиторий, mercurial проверяет количество жестких ссылок для каждого файла из папки .hg. Если ссылок две или больше, то перед записью жесткая ссылка для этого файла «ломается» (файл ХХХ с жесткой ссылкой копируется во временный файл, удаляется файл ХХХ, временный файл переименовывается в ХХХ).
Клонирование на общих ресурсах Windows
На компьютерах с ОС Windows при получении количества жестких ссылок на файлы, расположенные на общих ресурсах всегда возвращается 1, даже если на самом деле их больше.
Это значит, что mercurial при коммите в репозиторий, расположенный на общих ресурсах может сломать другие репозитории, файлы которых жестко связаны с файлами вашего репозитория. Причем при коммите не будет никакого сообщения об ошибке, ведь репозиторий, в который происходил коммит будет целым. Проверить репозиторий можно командой
hg verify
Тут написано, что начиная с версии 1.6.3 для предотвращения таких ситуаций mercurial при коммите всегда «ломает» жесткие ссылки, если репозиторий находится на общем ресурсе Windows.
Сейчас у меня стоит версия 2.2.1, но при коммите в репозиторий на общий ресурс, другие репозитории, завязанные на него, все равно ломаются. Решилась проблема, только после того, как все репозитории были склонированы с параметром --pull.
В таком поведении по умолчанию есть некоторая магия, из-за которой можно отхватить некоторую долю головных болей, которые я успешно и отхватил. Поэтому и решил перевести сюда эту информацию. Надеюсь кому-нибудь она сэкономит время и нервы.
Оригинал: http://mercurial.selenic.com/wiki/HardlinkedClones
Восстановление сломанных репозиториев: http://mercurial.selenic.com/wiki/RepositoryCorruption
Автор: quantum