сломанный Revlog и сирота Revlog в Mercurial - Как восстановить? - PullRequest
9 голосов
/ 16 октября 2011

Это то, что я получаю, когда проверяю hg:

repository uses revlog format 1
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 includes/base/class/ViewInstanceAdapter.class.php@7: broken revlog! (index data/includes/base/class/ViewInstanceAdapter.class.php.i is corrupted)
warning: orphan revlog 'data/includes/base/class/ViewInstanceAdapter.class.php.i'
158 files, 61 changesets, 270 total revisions
1 warnings encountered!
1 integrity errors encountered!
(first damaged changeset appears to be 7)

Я давно не пользуюсь Mercurial и не понимаю, что это значит.

(я использую TortoiseHg в Windows, и проект только локальный)

Ответы [ 2 ]

6 голосов
/ 16 октября 2011

Как уже говорилось ранее (хотя вы уже подтвердили, что это не работает), вам следует начать с попытки клонировать репозиторий; если проблемы связаны с dirstate, это может обойти его.

Далее, каждый клон содержит полный репозиторий, поэтому каждый клон фактически является резервной копией. У вас нет центрального сервера, коллеги или другой локальной копии? Попробуйте клонировать это, а затем вытащить из вашего поврежденного хранилища. Как первый поврежденный набор изменений сообщается как нет. 7 (из 270), это должно быть довольно старое, которое, вероятно, легко восстановить, и, надеюсь, повреждение не помешает Mercurial вытащить наборы изменений за пределы этого.

Третий вариант, который вы можете попробовать, - запустить преобразование Mercurial-Mercurial в вашем хранилище (hg convert repo repo-copy); дословное преобразование должно сохранить идентификаторы набора изменений без изменений, хотя, вероятно, возникнет та же проблема. Вы также можете попытаться указать filemap , чтобы отфильтровать файл ViewInstanceAdapter.

Поскольку поврежденный набор изменений настолько стар, и, учитывая, что Mercurial использует метод записи только для добавления, вероятной причиной этой проблемы является аппаратный сбой или случайное повреждение диска.

Обратите внимание, что Mercurial не является системой резервного копирования и не обеспечивает избыточность. Создание частых резервных копий (что в случае Mercurial так же просто, как «hg push») - единственный способ убедиться, что вы не потеряете свой драгоценный код.

Другой причиной, о которой я должен вас предупредить, являются антивирусные сканеры или служба индексирования Windows. Они блокируют файлы определенным образом, что предотвращает их удаление в течение коротких временных окон. Хотя Mercurial делает все возможное, чтобы быть надежным, его сложно защитить от всех случаев. Рекомендуется внести в белый список ваши репозитории, см. эту заметку .

1 голос
/ 17 октября 2011

Я нашел решение (спасибо Лоренс Холст), ТОЛЬКО если у вас есть чистый бисквит (без ошибок), включая исправление проблемы.

У меня проблема с выпуском версии 7, и у меня есть резервная копия до 18 версии.

Шаги:

  • Клонировать хранилище резервных копий на последней общей версии (здесь это 18)

  • Извлечение сломанных оборотов хранилища в клонированный (у вас теперь есть две головы, но изменений в рабочем каталоге нет, конечно)

  • Обновление клонированного репозитория до самой последней ревизии (совет)

Теперь у вас есть рабочий .hg dir:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...