Что делать при сбое svn cleanup? - PullRequest
239 голосов
/ 01 октября 2008

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

Теперь, когда я запускаю 'svn cleanup', я получаю:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control

MemPoolTests.cpp - это новый файл, добавленный другим разработчиком и сбитый при обновлении. Раньше его не было в моей рабочей папке.

Что я могу сделать, чтобы попытаться продвинуться вперед без необходимости извлекать свежую копию хранилища?

Уточнение: Спасибо за предложения о том, как убрать каталог с пути и уничтожить новую копию. Я знаю, что это вариант, но я бы хотел его избежать, так как есть много изменений, вложенных в несколько каталогов (это должна была быть ветвь ...)

Я надеюсь на более агрессивный способ очистки, возможно, каким-то образом заставить файл SVN испытать проблемы с возвращением в известное состояние (и я попытался удалить его рабочую копию ... это не помощь).

Ответы [ 31 ]

223 голосов
/ 02 ноября 2008

При запуске все заново не вариант ...

Я удалил файл журнала в каталоге .svn (я также удалил поврежденный файл в .svn/props-base), сделал очистку и возобновил свое обновление.

110 голосов
/ 26 апреля 2013

С SVN 1.7 все изменилось, и популярное решение удаления файла журнала в каталоге .svn неосуществимо при переходе к реализации рабочей копии базы данных.

Вот что я сделал, что сработало:

  1. Удалите каталог .svn для вашей рабочей копии.
  2. Начать новый заказ в новом временном каталоге.
  3. Отмените заказ (мы не хотим ждать, пока все будет снято).
  4. Запустите очистку этой отмененной проверки.
  5. Теперь у нас есть новый каталог .svn с чистой базой данных (хотя нет / несколько файлов)
  6. Скопируйте этот .svn в ваш старый, поврежденный рабочий каталог.
  7. Запустите svn update, и он должен привести ваш новый частичный каталог .svn в соответствие с вашим старым рабочим каталогом.

Это все немного сбивает с толку, мудрый процесс. По сути, мы делаем удаление поврежденных .svn, а затем создаем новые .svn для того же пути извлечения. Затем мы перемещаем этот новый .svn в наш старый рабочий каталог и обновляем его до репозитория.

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

-Jody

105 голосов
/ 17 января 2014

Взгляните на

http://www.anujvarma.com/svn-cleanup-failedprevious-operation-has-not-finished-run-cleanup-if-it-was-interrupted/

Сводка исправления из ссылки выше (спасибо Anuj Varma)

  1. Установить оболочку командной строки sqlite (sqlite-tools-win32) из ​​http://www.sqlite.org/download.html

  2. sqlite3 .svn/wc.db "select * from work_queue"

В SELECT должна отображаться ваша поврежденная папка / файл как часть рабочая очередь. Что вам нужно сделать, это удалить этот элемент из работы очереди.

  1. sqlite3 .svn/wc.db "delete from work_queue"

Вот и все. Теперь вы можете запустить очистку снова - и это должно работать. Или ты может перейти непосредственно к задаче, которую вы выполняли, прежде чем будет предложено запустить очистку (добавление нового файла и т. д.)

42 голосов
/ 01 октября 2008

Если ничего не помогает:

  1. Проверить в новую папку.
  2. Скопируйте измененные файлы поверх.
  3. Возвращайтесь.
  4. Перед удалением и использованием новой заархивируйте старую папку куда-нибудь (вы никогда не знаете, что паранойя - это хорошо).
26 голосов
/ 08 марта 2017

Последняя версия (я использую 1.9.5) решает эту проблему, добавив опцию «Снять блокировки» в меню очистки. Просто убедитесь, что этот флажок установлен при выполнении очистки.

eclean up window

16 голосов
/ 01 октября 2008

Этот ответ относится только к версиям до 1.7 (спасибо @ ŁukaszBachman) .

Subversion хранит свою информацию в каждой папке (в .svn), поэтому, если вы имеете дело с подпапкой, вам не нужно извлекать весь репозиторий - только та папка, которая разбилась:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir

Это даст вам хорошую рабочую копию папки borked, но у вас все еще есть резервные копии ваших изменений в borked_dir.bak. Тот же принцип применим к Windows / TortoiseSVN.

Если у вас есть изменения в изолированной папке, взгляните на

svn checkout -N borked_dir   # Non-recursive, but deprecated

или

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'
9 голосов
/ 07 января 2011
$ ls -la .svn
$ rm -f .svn/lock

Тогда

$ svn update

Надеюсь, это поможет

5 голосов
/ 05 февраля 2010

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

Современные файловые системы Windows (то есть дрянные) просто не понимают разницу между Filename и FILEname. У вас есть два возможных исправления:

  1. Проверка на платформе с реальной файловой системой (на основе Unix), переименование файла и принятие изменений.
  2. Когда вы загружены в Windows, вы можете переименовать файлы в обозревателе хранилища Eclipse SVN, который распознает разницу и переименовать файл там.
  3. Вы можете переименовывать проблемные файлы также удаленно с любого клиента SVN из командной строки, используя svn rename -m "broken filename case" http://server/repo/FILEname http://server/repo/filename
5 голосов
/ 20 октября 2008

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

Используя клиент командной строки, я смог увидеть сообщение об ошибке, указывающее, что ему не удалось переместить файл из .svn/props в .svn/prop-base.

Я посмотрел конкретный файл и обнаружил, что он помечен только для чтения. После удаления атрибута «только для чтения» я смог очистить папку и зафиксировать мои изменения.

3 голосов
/ 02 января 2015

Я пытался сделать svn cleanup через консоль и получил ошибку вроде:

svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
The system cannot find the file specified.

Итак, я создал этот файл вручную (пустой) и сделал svn cleanup снова. На этот раз все было в порядке.

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