Как уже говорилось ранее (хотя вы уже подтвердили, что это не работает), вам следует начать с попытки клонировать репозиторий; если проблемы связаны с dirstate, это может обойти его.
Далее, каждый клон содержит полный репозиторий, поэтому каждый клон фактически является резервной копией. У вас нет центрального сервера, коллеги или другой локальной копии? Попробуйте клонировать это, а затем вытащить из вашего поврежденного хранилища. Как первый поврежденный набор изменений сообщается как нет. 7 (из 270), это должно быть довольно старое, которое, вероятно, легко восстановить, и, надеюсь, повреждение не помешает Mercurial вытащить наборы изменений за пределы этого.
Третий вариант, который вы можете попробовать, - запустить преобразование Mercurial-Mercurial в вашем хранилище (hg convert repo repo-copy
); дословное преобразование должно сохранить идентификаторы набора изменений без изменений, хотя, вероятно, возникнет та же проблема. Вы также можете попытаться указать filemap , чтобы отфильтровать файл ViewInstanceAdapter.
Поскольку поврежденный набор изменений настолько стар, и, учитывая, что Mercurial использует метод записи только для добавления, вероятной причиной этой проблемы является аппаратный сбой или случайное повреждение диска.
Обратите внимание, что Mercurial не является системой резервного копирования и не обеспечивает избыточность. Создание частых резервных копий (что в случае Mercurial так же просто, как «hg push») - единственный способ убедиться, что вы не потеряете свой драгоценный код.
Другой причиной, о которой я должен вас предупредить, являются антивирусные сканеры или служба индексирования Windows. Они блокируют файлы определенным образом, что предотвращает их удаление в течение коротких временных окон. Хотя Mercurial делает все возможное, чтобы быть надежным, его сложно защитить от всех случаев. Рекомендуется внести в белый список ваши репозитории, см. эту заметку .