Это никогда не происходит при обычном использовании. Большинство сайтов имеют репо в течение многих лет, даже не видя, как hg verify
говорит что-либо.
Единственный раз, когда я видел это, было вызвано одним из:
- людей, удаляющих файлы слишком агрессивно. Например:
find . -name '*.bak' | xargs rm
. Это кажется действительно безопасным, но он удаляет файлы изнутри repo/.hg/store
, который является зоной, не требующей доступа пользователя
- люди, изменяющие файлы слишком агрессивно. Например
find repo -type f | xargs perl -pie 's/1999/2000'
. Такое ощущение, что вы меняете 1999 на 2000 во всех файлах в рабочем каталоге, но вы снова включили repo/.hg/store
и теперь ваши файлы повреждены
- людей, использующих любой механизм, отличный от
hg push, pull, and clone
, для перемещения изменений или наборов изменений с одного компьютера на другой.
Этот последний стоит другого списка. Любое из них подозрительно:
- репо на файловом сервере (особенно windows / smb) с
hg
на локальных машинах
- синхронизация каталогов .hg в стиле dropbox
Авторы Mercurial действительно усердно работают над тем, чтобы все исправить , когда вы работаете с репозиторием, находящимся на удаленном файловом сервере, но примитивы протоколов файлового сервера просто отсутствуют. Например, hg clone
создает жесткие ссылки, которые поддерживает NTFS, а в локальных системах вызов get-link-count возвращает текущее число, даже если оно больше 1, но когда клиенты Windows запрашивают файлы, размещенные в NTFS, через некоторые версии smb Windows всегда возвращает счетчик ссылок, равный 1, что говорит Mercurial, что ни один другой клон не использует этот файл, поэтому его можно изменить без предварительного копирования.
Я думаю, что последний из них был исправлен в Mercurial, но основной императив заключается в том, что если по вашему сетевому кабелю приходят «изменения», инициируемые любой командой, кроме push, pull или клон, о котором вы мечтаете, и вам нужно принять распределенную природу DVCS и иметь действительно локальный клон.
Если ваше повреждение вызвано ни чрезмерно широкими рекурсивными командами, ни ерундой файлового сервера, то это то, чего я раньше не видел.