Что делать при сбое svn cleanup?


245

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

Теперь, когда я запускаю '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 испытать проблемы с возвращением в известное состояние (и я попытался удалить его рабочую копию ... это не помогло).


Re: Использование новой копии. Возьмите копию несопоставимого для сравнения версий друг с другом
Jon Winstanley

2
Разве решение амина не работает для вас? Конечно, очевидный ответ принять иначе?
Алиса Перселл

2
Убедитесь, что ни один из файлов не открыт приложением, его легко забыть. Process Explorer и быстрый поиск по пути очень полезно , чтобы раскрыть это: technet.microsoft.com/en-us/sysinternals/bb896653.aspx
angularsen

4
ИМХО, наличие команды "svn cleanup" является ошибкой.
yoyo

Ответы:


223

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

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


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

2
+1 Я не могу сказать вам, сколько раз я был в этой ситуации. Когда это подпапка без проблем, просто удалите всю папку, очистите и обновите. Но когда это файл в корневом уровне, это не дешевый вариант (несколько часов, чтобы снова оформить весь проект). Фантастический совет - большое спасибо.
Эван Мейкпис

9
Для меня удаление заблокированных файлов сделало это. Может быть, кому-то интересно. Вы можете удалить их рекурсивно с помощью следующей команды: rm -rffind . -type f -name lock
H6.

1
Команда happy-coding не работает. Это делает:sudo rm -rf | find . -type f -name lock
Zachary Schuessler

2
Я не мог найти .svn/prop-baseу меня.svn/[pristine|tmp|entries|format|wc.db]
bigpony

112

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

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

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

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

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

-Jody


8
Я, кажется, делаю это, по крайней мере, два раза в месяц. Такая боль. Команда SVN должна добавить эти шаги svn cleanup --force. И, конечно, все операции добавления, удаления и (с 1.8) переименования теряются.
Мартин

2
@Adgezaza Да. Да, это так.
MJS

1
это исправить это для меня. Это немного по-другому: после изменения svn происходит сбой обновления для 1 конкретной папки. Удалите эту папку, и все в порядке
Hoàng Long

@ Щенок, так и должно быть. По сути, вы просто извлекаете метаданные для новой проверки, а затем заполняете ее файлами. SVN определит, соответствуют ли файлы метаданным или нет. Но, вы знаете, сначала все
застегните на

1
Я переустанавливал SVN (Tortoise SVN 1.8), просматривал каждую папку svn из моего проекта, затем выполнял операции, упомянутые здесь, и вуаля! Спасибо автору!
Дмитрий

110

Взгляни на

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"

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


Обратите внимание, что ответы , содержащие только ссылки, не приветствуются, поэтому ответы SO должны быть конечной точкой поиска решения (в отличие от еще одной остановки ссылок, которая, как правило, устаревает со временем). Пожалуйста, рассмотрите возможность добавления отдельного краткого обзора здесь, сохраняя ссылку в качестве ссылки.
Клеопатра

8
Firefox имеет расширение sqlite manager, которое может открывать и редактировать файл .svn / wc.db. Предоставляет удобный графический интерфейс для выполнения эквивалентных операций над work_queue.
Волшебник

Если у вас последняя версия SVN и Firefox, надстройка sqlite manager решит эту проблему за 30 секунд. Не беспокойтесь об удалении каталогов или использовании Repobrowser. В 2016 году я думаю, что это должен быть принятый ответ
арбитр

5
Для меня запуск "удалить из WC_LOCK;" требуется также.
Tristan.Liu

Работай отлично! Свн отстой! Но после удаления из work_queue svn выдает мне другую ошибку «svn locked», просто запустите с черепахой (у eclipse нет опции) очистите с проверкой «
break lock

42

Если все остальное терпит неудачу:

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

27

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

очистить окно


Это кажется таким очевидным сейчас! Спасибо
Билли Джейк О'Коннор

Работал как шарм!
Вишванат

Хорошо работает для меня.
Сергей

Работал! Когда я увидел это решение, я сразу понял, в чем проблема ... (я думаю): у меня все еще был открыт Excel, который его модифицировал. Я хотел зафиксировать свои изменения в некоторых java-файлах, увидел файл Excel и сказал: «Я ничего не изменил там ... вернуть». Что не сработало, тогда я понял, что он все еще открыт, закрыл его, F5, больше не появлялся в коммите, поэтому приступайте к коммиту. И тогда он говорит мне "пожалуйста, убери", и оттуда я застрял. Так что спасибо! :)
BAERUS

16

Этот ответ относится только к версиям до 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'

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

Это сработало для меня - все, что я делал, было svn upтем же репо, что и посреди svn upдругой вкладки, - я забыл, что сделал это, и оставил его незавершенным прошлой ночью.
Джон З

Больше не соответствует действительности - в последней версии SVN теперь использует только один .svnкаталог.
Лукаш Бахман


6

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

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

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


Я отказался от этого дерева, и в конце концов получил новое. Но спасибо за подсказку о чем-то, чтобы проверить в следующий раз.
Роб Уокер

ха ... я даже переименовал папки в .svn \ нетронутой области из {name} в {name} _old, а затем обратно в исходное {name}, и это сработало
beauXjames

5

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

Современные файловые системы 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

Это оказалось моей проблемой; сотрудник каким-то образом сумел проверить несколько файлов проекта Xcode, каждый с двумя копиями, отличающимися только регистром букв. Я использовал TortoiseSVN, чтобы просмотреть репо и удалить дополнительные файлы. Затем я удалил свои локальные папки, содержащие дубликаты файлов, и обновление SVN, наконец, прошло успешно.
кгрифы

Не просто проблема Windows. Это также влияет на Mac. Файловые системы Mac HFS +, по умолчанию, также делают регистрозависимые, но сохраняют регистры имен файлов. Я установил второй раздел на моем жестком диске, который делает имена файлов с учетом регистра, чтобы обойти эти проблемы.
Дэвид В.

4

Запустите svn cleanupкоманду в терминале (если он выйдет из Eclipse, как в моем случае):

~/path/to/svn-folder/$ svn cleanup

Я пробовал разные решения, объясненные здесь, но ни один не работал .

Команда действий → Не удается обновить голову :

svn: E155004: в '/ home / user / path / to / svn-folder' есть незавершенные рабочие элементы; сначала запустите 'svn cleanup'.

Действие командыОчистка завершается с той же ошибкой.

Решение, которое сработало для меня: запустите команду svn cleanup в терминале .

Команда выполнена успешно.

Тогда КомандаОбновление в Eclipse снова заработала.

Примечание: моя версия SVN 1.9.3.

Также проверьте ответ Криса, если svn cleanupне работает.


3

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

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

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


3

У меня такая же проблема. Для меня причиной стал конфликт с EasySVN и (TortoiseSVN или просто SVN). У меня было автоматическое обновление и коммит с EasySVN (который не работал).

Когда я отключил это, я не смог очистить, зафиксировать или обновить. Ни одно из вышеперечисленных решений не сработало, но перезагрузка сделала :)


Даааааа, Джими, ты мой герой (в).
TRoa

2

У меня была такая же проблема на Windows 7 64-bit. Я запустил консоль как администратор и удалил каталог .svn из проблемного каталога (получил ошибку в журналах или что-то в этом роде, но проигнорировал ее). Затем в проводнике я удалил проблемный каталог, который больше не показывался как под управлением версиями. Затем я запустил обновление, и все пошло так, как ожидалось.


2

Если проблема заключается в чувствительности к регистру (что может быть проблемой при выходе на Mac, а также в Windows), и у вас нет возможности проверить систему * nix, должно работать следующее. Вот процесс с самого начала:

% svn co http://[domain]/svn/mortgages mortgages

(Оформить заказ следует ... затем ...)

svn: In directory 'mortgages/trunk/images/rates'
svn: Can't open file 'mortgages/trunk/images/rates/.svn/tmp/text-base/Header_3_nobookmark.gif.svn-base': No such file or directory

Здесь SVN пытается проверить два файла с похожими именами, которые отличаются только регистром - Header_3_noBookmark.gifи Header_3_nobookmark.gif. Файловые системы Mac по умолчанию нечувствительны к регистру таким образом, что SVN задыхается в подобных ситуациях. Так...

% cd mortgages/trunk/images/rates/
% svn up
svn: Working copy '.' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)

Однако бег svn cleanupне работает, как мы знаем.

% svn cleanup
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'spacer.gif' is not under version control

spacer.gifпроблема не в этом ... Он просто не может перейти от предыдущей ошибки к следующему файлу. Поэтому я удалил все файлы из каталога, кроме .svn, и удалил журнал SVN. Это заставило очистку работать, так что я мог проверить и переименовать нарушающий файл.

% rm *; rm -rf .svn/log; svn cleanup
% svn up Header_3_nobookmark.gif
A    Header_3_nobookmark.gif
Updated to revision 1087.
% svn mv Header_3_nobookmark.gif foo
A         foo
D         Header_3_nobookmark.gif
% svn up
A    spacer.gif
A    Header_3_noBookmark.gif

После этого я смог вернуться в корневой каталог проекта и запустить, svn upчтобы проверить остальную часть.


2

Всякий раз, когда у меня возникают подобные проблемы, я использую rsync (примечание: я использую Linux или Mac OS X), чтобы помочь так:

# Go to the parent directory
cd dir_above_borked

# Rename corrupted directory
mv borked_dir borked_dir.bak

# Checkout a fresh copy
svn checkout svn://... borked_dir

# Copy the modified files to the fresh checkout
# - test rsync
#   (possibly use -c to verify all content and show only actually changed files)
rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/

# - If all ok, run rsync for real
#   (possibly using -c again, possibly not using -v)
rsync -av --exclude=.svn borked_dir.bak/ borked_dir/

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


2

Я столкнулся с этим слишком поздно. Хитрость для меня заключалась в том, что после выбора «Очистить» в диалоговом окне параметров всплывающего окна выберите «Снять блокировки», а затем «ОК». Удачно зачищено для меня.


1
SVN не имеет всплывающего диалога как такового; может быть, вы используете черепаху. OP использует клиент командной строки, поэтому ваш совет не очень полезен.
Роберт

1

Subclipse смущает по-настоящему дьявольское поведение блокировки Windows. Unlocker твой друг. Это может найти заблокированные файлы и принудительно снять блокировки.


1

(Прежде чем пытаться перемещать папки и делать новые проверки.)

Удалите папку, в которой находятся поврежденные файлы, - да, даже .svnпапку, затем сделайте ее svn cleanupв самой верхней / родительской папке.


1

Я столкнулся с той же проблемой. После некоторых поисков в интернете нашел ниже статью . Затем понял, что я вошел как пользователь, отличный от пользователя, которого я использовал для настройки SVN, в основном проблема с разрешениями.


1

Когда я сталкиваюсь с этой проблемой в TortoiseSVN (Windows), я захожу в Cygwin и оттуда запускаю ' svn cleanup '; он у меня корректно очищается, после чего все работает от TortoiseSVN.


Это также работает с окном cmd. Я не знаю, почему это работает, когда черепаха терпит неудачу, но иногда это работает.
Ватусимото

0

Ответы здесь не помогли мне, но перед повторной проверкой проекта я закрыл и открыл Eclipse (Subversive - мой клиент SVN), и проблема исчезла.


0

Это может применяться не во всех ситуациях, но когда я недавно столкнулся с этой проблемой, мое «исправление» заключалось в обновлении пакета Subversion в моей системе. Я работал с 1.4.something, и когда я обновился до последней версии (1.6.6 в моем случае), проверка работала.

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


0

Блокировка только для чтения иногда происходит на сетевых дисках с Windows. Попробуйте отключить и снова подключить его. Затем очистите и обновите.


0

После просмотра большинства решений, которые здесь приведены, я все еще получал ошибку.

Этот вопрос был чувствителен к регистру OS X . Извлечение каталога, в котором есть два файла с одинаковыми именами, но с разной капитализацией, вызывает проблему. Например, ApproximationTest.java и Approximationtest.java не должны находиться в одном каталоге. Как только мы избавимся от одного из файлов, проблема исчезнет.


0

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

#>svn st
!       my_dir
!       my_dir\sub_dir

svn cleanup, svn revert, svn updateИsvn resolve все они были неудачными при фиксации этого.

В конце концов я решил проблему следующим образом:

  • Посмотрите в каталоге .svn "sub_dir"
  • Используйте RC -> Свойства, чтобы снять флажок «только для чтения» в файле записей
  • Откройте файл записей и удалите строку «незакончено ...» и соответствующую контрольную сумму
  • Сохраните и снова включите флаг только для чтения.
  • Повторите для каталога my_dir

После этого все было хорошо.

Обратите внимание, что у меня не было локальных изменений, поэтому я не знаю, рискнул бы ты, если бы сделал. Я не использовал метод удаления / обновления, предложенный другими, - я попал в это состояние, попробовав его в каталоге my_dir / sub_dir / sub_sub_dir (который начинался с тех же симптомов) - поэтому я не хотел рисковать ухудшением ситуации очередной раз!

Не совсем по теме, но, возможно, полезно, если кто-то сталкивается с этим постом, как я.


0

Нет нет нет! Если вы используете SVN 1.7 или выше, команда очистки должна сделать эту работу!

Я также провел несколько экспериментов и обнаружил, что решением (по крайней мере, в Eclipse ) было выполнение очистки только для папки, указанной в сообщении об ошибке, а не для всего проекта!


Это сработало для меня сегодня, поэтому я собираюсь +1. С другой стороны, в другой раз я попал в цикл как раз наоборот - я щелкал правой кнопкой мыши по папке и выбрал «очистить», когда вместо этого мне нужно было щелкнуть правой кнопкой мыши пустое место. Так что многое зависит от конкретной ситуации.
Дафна Б

downvote, потому что ответ на вопрос «как исправить ситуацию, когда очистка svn не удалась» - не «это должно сработать»
mjs

0

Я сделал, sudo chmod 777 -R .чтобы иметь возможность изменить разрешения. Без sudoэтого это не сработало бы, выдавая ту же ошибку, что и другие команды.

Теперь вы можете делать svn updateчто угодно, не выбрасывая весь каталог и не создавая его заново. Это особенно полезно, поскольку в вашей IDE или текстовом редакторе уже могут быть открыты определенные вкладки или возникли проблемы с синхронизацией. Вам не нужно удалять и заменять ваш рабочий каталог этим методом.


0

Я решил эту проблему, скопировав каталог моего коллеги .svn в мою, а затем обновив свою рабочую копию. Это было хорошее, быстрое и чистое решение.


0

В предыдущем ответе есть несколько очень хороших советов, но если у вас возникла проблема с TortoiseSVN в Windows (хороший продукт, но ...), всегда возвращайтесь к командной строке и сначала выполняйте простую «очистку svn».

Во многих случаях клиент Windows не будет запускать команду очистки, но очистка работает нормально, используя утилиту командной строки SVN.


0

Несмотря на аналогичную проблему, ручное слияние в представлении синхронизации репозитория помогло решить проблему.

Одно имя файла конфликтовало с другим, и в нем явно упоминалась проблема. Переименование нового файла в другое имя разрешило его.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.