Как стать автором
Обновить

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

Системы управления версиями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
Теги:mercurialжесткие ссылкиrepository corruption
Хабы: Системы управления версиями Mercurial
Всего голосов 23: ↑21 и ↓2 +19
Просмотры2.4K

Похожие публикации

Программист отдела управления данными
от 60 000 до 107 000 ₽ТатнефтьАльметьевск
Инженер отдела управления данными
от 59 000 ₽ТатнефтьАльметьевскМожно удаленно
PHP-разработчик
от 40 000 до 50 000 ₽ЭНДИ КонсалтингМожно удаленно
Enterprise архитектор (разработка системы мониторинга)
от 270 000 до 300 000 ₽Ростелеком-ЦОДМоскваМожно удаленно
Разработчик Unity
от 150 000 ₽ArcaniteМожно удаленно

Лучшие публикации за сутки