Mercurial: сообщение "abort: index 00changelog.i поврежден!" после запуска команды sed. Как с этим бороться?

У меня есть проект от Mercurial. Однажды я запустил такую ​​команду, как...

$ find . -type f | xargs sed -i.bkp 's/my_func/another_func/'

... в этом проекте. Тогда Mercurial просто перестал работать над этим:

$ hg status
abort: index 00changelog.i is corrupted!

Файл 00changelog.i не содержит замененную строку, и даже если я перееду 00changelog.i.bkp в 00changelog.i проблема осталась. hg verify тоже не помогло:

$ hg verify
abort: index 00changelog.i is corrupted!

Я решил эту проблему, клонировав проект из моего удаленного репозитория в другой каталог, а затем скопировав .hg из моего клонированного хранилища в испорченное. Однако мне интересно: есть ли другой, более практичный способ его решения? Кстати, почему эта проблема происходит, если "поврежденный" файл даже не изменяется?

2 ответа

Решение

Обратите внимание, что существует два файла 00changelog.i:

  • один в.hg/00changelog.i, который является небольшим заполнителем обратной совместимости для древних версий
  • другой (тот, который вы испортили) в.hg/store/00changelog.i

Я бы использовал конвертирование, чтобы заново сгенерировать репо или пересадку, чтобы переместить патчи в новое. Удачи.

Другие вопросы по тегам