Восстановление рабочей копии SVN
Назначение
Section titled “Назначение”Инструкция описывает случай, когда SVN не мог обновить рабочую копию из-за отсутствующей контрольной суммы файла prog.csv. Cleanup и Revert также завершались ошибкой. На объекте проблему удалось устранить правкой локальной базы SVN.
Как выглядит проблема
Section titled “Как выглядит проблема”При обновлении или выполнении Cleanup появляется сообщение:
Failed to run the WC DB work queuefrom pristine store, because no checksum is recorded for this file
Рисунок 1 — ошибка обработки рабочей очереди SVN для файла prog.csv.
В сообщении указан путь к проблемному файлу. Он понадобится при проверке записей в базе.
Что потребуется
Section titled “Что потребуется”Понадобится программа для работы с базами SQLite. На объекте использовалась DB Browser for SQLite (SQLiteDatabaseBrowser).
1. Откройте локальную базу SVN
Section titled “1. Откройте локальную базу SVN”- Запустите DB Browser for SQLite.
- Нажмите Open Database / Открыть базу данных.
- В корне проблемной рабочей копии откройте скрытую папку
.svn, затем файлwc.db.
Для рабочей папки на скриншоте полный путь:
C:\SVN_Global\.svn\wc.dbНа вашем компьютере корневая папка может называться иначе. Если .svn не видна, включите отображение скрытых элементов в Проводнике или введите полный путь в диалоге открытия.
2. Проверьте застрявшие задачи
Section titled “2. Проверьте застрявшие задачи”Перейдите на вкладку Execute SQL / Выполнить SQL, вставьте запрос и выполните его:
SELECT * FROM WORK_QUEUE;Посмотрите записи очереди и найдите операцию с путём к prog.csv, указанным в ошибке.
Если содержимое столбца work отображается как BLOB и не читается, используйте текстовое представление:
SELECT id, CAST(work AS TEXT) AS operationFROM WORK_QUEUE;Сверяйте полный путь, поскольку в проекте могут быть разные файлы с именем prog.csv. Если записи с нужным путём нет, не выполняйте запросы удаления из следующего шага: причина ошибки может быть другой.
3. Выберите вариант исправления
Section titled “3. Выберите вариант исправления”Ниже приведены два варианта из описания случая на объекте. Они изменяют разные таблицы. Выберите подходящий вариант; выполнять оба подряд не требуется.
Вариант А. Удаление записей о prog.csv
Section titled “Вариант А. Удаление записей о prog.csv”Сначала посмотрите, какие записи попадут под условие удаления:
SELECT wc_id, local_relpath, op_depthFROM NODESWHERE local_relpath LIKE '%prog.csv%';Запрос из описания решения:
DELETE FROM NODES WHERE local_relpath LIKE '%prog.csv%';Он удаляет сведения о файлах из таблицы NODES, а не задачи очереди. Условие охватывает все пути, содержащие prog.csv. Если предварительный просмотр показывает другие файлы, кроме относящихся к вашему случаю, не выполняйте массовое удаление по этому шаблону.
Вариант Б. Полная очистка очереди задач
Section titled “Вариант Б. Полная очистка очереди задач”Для полной очистки таблицы незавершённых операций в описании приведён запрос:
DELETE FROM WORK_QUEUE;Он удаляет всю очередь, включая задачи для других файлов. Ожидающие операции будут удалены без выполнения. Запрос не восстанавливает отсутствующие контрольные суммы.
4. Сохраните изменения
Section titled “4. Сохраните изменения”- Убедитесь, что выбранный SQL-запрос выполнен без ошибки.
- Нажмите Write Changes / Записать изменения.
- Закройте базу и программу DB Browser for SQLite, чтобы она не удерживала файл базы открытым.
5. Повторите обновление SVN
Section titled “5. Повторите обновление SVN”- В Проводнике откройте контекстное меню рабочей папки и выполните SVN Update.
- Проверьте, что обновление завершается без сообщения с рисунка 1.
- Через TortoiseSVN → Check for modifications проверьте локальные изменения и состояние файлов
prog.csv. Сравните их с сохранённой копией: после правки базы не должно остаться неожиданных удалений или потери локальных правок.
На объекте после правки базы SVN снова заработал. На своём АРМ проверьте результат обновлением рабочей копии и сравнением файлов с резервной копией.
Если ошибка повторяется, сохраните её текст и резервную копию для дальнейшего разбора. Не продолжайте удалять записи наугад.
Справка: чем отличаются NODES и WORK_QUEUE
NODES хранит метаданные версионируемых файлов и каталогов, а WORK_QUEUE — незавершённые операции рабочей копии. Поэтому приведённые команды не являются равнозначными способами очистки очереди. Назначение таблиц описано в схеме базы Apache Subversion.