2010-02-20 5 views
11

У меня есть рабочая копия Subversion с хотя бы одним отсутствующим файлом (локальная копия удалена при устранении конфликта дерева). Это забавно, потому что файл имеет версию, он появляется в репозитории, разрешение конфликтов на дереве было на 100% локально (это произошло при обновлении, и я не совершал потом), и я запускал «svn cleanup» несколько раз, но ни один из моих Клиенты Subversion (командная строка svn и TortoiseSVN) могут обнаружить, что рабочая копия повреждена. Даже не возвращая все изменения, этот файл вернулся.Как проверить рабочую копию Subversion

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

Как вы можете проверить работоспособность рабочей копии?

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

=== UPDATE ===

У меня хорошие ответы с уловок, чтобы предотвратить коррупцию рабочей копии, но мой вопрос был больше на линии найти способ, чтобы быть 100% уверены, что рабочий копия является как согласованной, так и связанной с фактическим содержимым репозитория; в других работах рабочий эквивалент команды svnadmin проверяет команду.

До сих пор, это выглядит следующим образом:

  • Subversion не предоставляет такой инструмент, и возможно, что формат данных SVN даже не позволяет писать один.

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

  • Проверка свежей рабочей копии выглядит как единственный 100% надежный метод.

+0

У меня были схожие проблемы - переименование папок иногда вызывает проблему, хотя и не каждый раз. * Обычно *, возврат возвращает рабочую копию в допустимое состояние, но с неверсированными элементами («копия» стороны переименованной папки) остается позади. Но да, мне тоже нужен инструмент проверки достоверности. – Steve314

+0

Возможно, проблема в том, что рабочее состояние копии действительно, а не то, что, по вашему мнению, должно быть. Например, для рабочей копии допустимо исключить определенные файлы или папки, которые находятся в репозитории. Просто потому, что состояние запутывает и не то, что вы намереваетесь, не означает, что оно не может возникнуть законно, и в этом случае «ошибка» не обнаруживается. Инструмент «Состояние этой рабочей копии», в котором содержится список «интересных», может быть более полезным. – Steve314

+0

@ Steve314: Основное содержимое рабочей копии должно быть идентично содержимому в репозитории. Subversion - это централизованная система управления версиями, поэтому это обязательное условие, и оно должно быть обнаружено. Конечно, инструмент, который вы описали, также будет отличным (например, я бы хотел узнать, когда у меня есть .svn dirs из разных репозиториев), но это совсем другая история. –

ответ

1

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

Хотя возможно, что WC-NG изменяет это для лучшего (или нет), текущий формат не является таким прочным.

2

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

Вы также можете выполнить diff из командной строки, если хотите.

+0

Интересно ... Если я использую пункт меню «Diff with URL» TortoiseSVN, чтобы сравнить рабочую копию с ящиком репозитория, я, наконец, получаю сообщение об ошибке: Путь D: /Project/working-copy/missing-file.php в файле исправления не существует. TortoiseMerge попытался применить патч, сняв префиксы, но не удалось найти соответствующий путь. –

+0

@ Steve314: Вы пропустили тег 'tortoisesvn'? – sbi

+0

@sbi - да, и похоже, что я ошибаюсь и по другому счету - ну ладно. – Steve314

1

У меня были схожие проблемы, когда я начал работать с SVN, используя Tortoise в Windows. Всякий раз, когда мне нужно было скопировать папку - например. при создании нового подключаемого модуля, который был основан на другом, уже существующем - я просто копировал + вставлял его в рабочую копию.

Я не знал, что когда вы это делаете, вы копируете каталог метаданных .svn. Это приводит к бесконечной путанице subversion - если вы работаете с графическим клиентом, новый каталог, кажется, правильно проверен, и клиент показывает вам чистую пластину после каждой фиксации. Но, новый каталог никогда не проверяется в.

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

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

3

Это выглядит как проблема, что я испытал некоторое время назад: svn - file in working copy seems "lost"

процитировать ответ wcoenen дословно:

SVN 1.6.1 клиентов (в том числе TortoiseSVN) была ошибка, когда папки иногда ошибочно устанавливается на глубина «пустая». Это вызывает описанные вами симптомы . (Обратите внимание, что это возможно, что папка была сделана «пустой» по СВН 1.6.1 и остался таким образом, даже если вы уже модернизированный до новой клиента SVN в среднее время.)

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

+0

Это выглядит хорошо на первый взгляд. В моей тестовой копии этот метод восстановил недостающий файл. –

+0

False alarm.Я протестировал в двух рабочих экземплярах, у меня есть точка в том же месте и в редакции: в одном из них отсутствует файл с версией, а «Обновление для ревизии» ничего не помогает восстановить файл (или даже предупредить, что что-то не так). –

Смежные вопросы