Восстановление рабочей копии 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.