Жесткие ссылки при клонировании репозитория в mercurial

в 6:32, , рубрики: Mercurial, метки:

При клонировании репозитория с помощью команды

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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js