Skip to content

Восстановление рабочей копии SVN

Инструкция описывает случай, когда SVN не мог обновить рабочую копию из-за отсутствующей контрольной суммы файла prog.csv. Cleanup и Revert также завершались ошибкой. На объекте проблему удалось устранить правкой локальной базы SVN.

При обновлении или выполнении Cleanup появляется сообщение:

Failed to run the WC DB work queue
from pristine store, because no checksum is recorded for this file

Ошибка TortoiseSVN: Cleanup не может обработать prog.csv, поскольку для файла не записана контрольная сумма

Рисунок 1 — ошибка обработки рабочей очереди SVN для файла prog.csv.

В сообщении указан путь к проблемному файлу. Он понадобится при проверке записей в базе.

Понадобится программа для работы с базами SQLite. На объекте использовалась DB Browser for SQLite (SQLiteDatabaseBrowser).

1. Откройте локальную базу SVN

Section titled “1. Откройте локальную базу SVN”
  1. Запустите DB Browser for SQLite.
  2. Нажмите Open Database / Открыть базу данных.
  3. В корне проблемной рабочей копии откройте скрытую папку .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 operation
FROM WORK_QUEUE;

Сверяйте полный путь, поскольку в проекте могут быть разные файлы с именем prog.csv. Если записи с нужным путём нет, не выполняйте запросы удаления из следующего шага: причина ошибки может быть другой.

3. Выберите вариант исправления

Section titled “3. Выберите вариант исправления”

Ниже приведены два варианта из описания случая на объекте. Они изменяют разные таблицы. Выберите подходящий вариант; выполнять оба подряд не требуется.

Вариант А. Удаление записей о prog.csv

Section titled “Вариант А. Удаление записей о prog.csv”

Сначала посмотрите, какие записи попадут под условие удаления:

SELECT wc_id, local_relpath, op_depth
FROM NODES
WHERE local_relpath LIKE '%prog.csv%';

Запрос из описания решения:

DELETE FROM NODES WHERE local_relpath LIKE '%prog.csv%';

Он удаляет сведения о файлах из таблицы NODES, а не задачи очереди. Условие охватывает все пути, содержащие prog.csv. Если предварительный просмотр показывает другие файлы, кроме относящихся к вашему случаю, не выполняйте массовое удаление по этому шаблону.

Вариант Б. Полная очистка очереди задач

Section titled “Вариант Б. Полная очистка очереди задач”

Для полной очистки таблицы незавершённых операций в описании приведён запрос:

DELETE FROM WORK_QUEUE;

Он удаляет всю очередь, включая задачи для других файлов. Ожидающие операции будут удалены без выполнения. Запрос не восстанавливает отсутствующие контрольные суммы.

  1. Убедитесь, что выбранный SQL-запрос выполнен без ошибки.
  2. Нажмите Write Changes / Записать изменения.
  3. Закройте базу и программу DB Browser for SQLite, чтобы она не удерживала файл базы открытым.

5. Повторите обновление SVN

Section titled “5. Повторите обновление SVN”
  1. В Проводнике откройте контекстное меню рабочей папки и выполните SVN Update.
  2. Проверьте, что обновление завершается без сообщения с рисунка 1.
  3. Через TortoiseSVN → Check for modifications проверьте локальные изменения и состояние файлов prog.csv. Сравните их с сохранённой копией: после правки базы не должно остаться неожиданных удалений или потери локальных правок.

На объекте после правки базы SVN снова заработал. На своём АРМ проверьте результат обновлением рабочей копии и сравнением файлов с резервной копией.

Если ошибка повторяется, сохраните её текст и резервную копию для дальнейшего разбора. Не продолжайте удалять записи наугад.

Справка: чем отличаются NODES и WORK_QUEUE

NODES хранит метаданные версионируемых файлов и каталогов, а WORK_QUEUE — незавершённые операции рабочей копии. Поэтому приведённые команды не являются равнозначными способами очистки очереди. Назначение таблиц описано в схеме базы Apache Subversion.

К разделу SVN