SVN - Несоответствие контрольной суммы при обновлении

122

Когда я пытаюсь обновить некоторые файлы из Subversion, я получаю сообщение об ошибке:

org.tigris.subversion.javahl.ClientException: 
Checksum mismatch while updating 'D:\WWW\Project\\.svn\text-base\import.php.svn-base'; expected: '3f9fd4dd7d1a0304d8020f73300a3e07', actual: 'cd669dce5300d7035eccb543461a961e'

Почему я это получаю? Как я могу это исправить?

Коралек М.
источник

Ответы:

70

Самый простой способ исправить это (если у вас мало изменений) - скопировать ваши изменения в другой каталог, удалить каталог, в котором был разрегистрирован ваш проект, и снова проверить проект.

Затем скопируйте свои изменения обратно (не копируйте никакие папки .svn), зафиксируйте и продолжите.

sjakubowski
источник
9
Я просто удалил папку, в которой был проблемный файл, и обновил весь проект. Теперь вроде нормально.
Коралек М.
+1 Другая альтернатива, которую я нашел,
позволила
@SeanDowney, как это сделать?
arvindwill
@arvindwill Извините, в моем комментарии я не совсем ясно понял, этот метод намного проще. Вот страшная альтернатива: maymay.net/blog/2008/06/17/…
SeanDowney
2
Это вообще не конкретное исправление. Вы всегда можете удалить все свои локальные данные и начать с новой копии из репо.
Tim
197

В случае , если вы используете SVN 1.7+ есть обходной путь описан здесь .

Напомним:

  1. Перейдите в папку с файлом, вызывающим проблемы
  2. Выполните команду svn update --set-depth empty(обратите внимание: это приведет к удалению ваших файлов, поэтому сначала сделайте копию!)
  3. Выполнить команду svn update --set-depth infinity
JRD
источник
17
Хотя это сработало для меня, обратите внимание, что "svn update --set-depth empty" удалит все из этого пути, поэтому сначала сделайте копию
tristanbailey 02
3
Это отлично сработало для исправления гигантского репозитория в удаленном месте. Хотя выполнение новой проверки могло бы сработать, это заняло бы более часа; это заняло минуты.
Брайан Гиллеспи
привет, я использую окно и tortoisesvn в качестве svn-клиента .. Я пробовал ваше решение. но оно все еще показывает isse
Амит Бера
Просто заменил каталог .svn из нового репозитория на старый, все
заработало
У меня это сработало, спасибо! Стоит отметить, что пункт №1 - это перейти к фактической папке (или файлу), которая вызывает проблему. Тогда вам не придется много обновлять. У меня была папка с несколькими десятками файлов, в которой я использовал Tortoise «Обновить до-> только этот элемент» в папке, а затем «Обновить до-> полностью рекурсивно», чтобы все это вернуть. Тем не менее, все помните, что это удаляет файлы в этой папке! На медленном канале VPN с многогигабайтным репозиторием и тщательно настроенными параметрами --set-depths "стандартное" решение было просто бесполезным.
dash-tom-bang
6

У меня была такая же проблема. Основным провайдером был антивирус «FortiClient» (антивирус + VPN-клиент). Когда я отключил его - все обновления / проверки были сделаны правильно

pawicek
источник
1
Это единственный ответ, который решил мою проблему. Я никогда не мог подумать об этом. Спасибо!
время
5

Я нашел более простой способ решить эту проблему. Вы не можете сделать это прямо из затмения. шаги:

  1. Перейдите к структуре папок рабочей области в Windows
  2. переименовать папку
  3. обновить в затмении
  4. Теперь папка и файлы будут удалены из проекта в eclipse и появятся в новой переименованной папке.
  5. Теперь попробуйте вариант «Синхронизировать с репозиторием».

Это восстановит базовую текстовую папку в .svnfolder. Несовпадение контрольной суммы при обновлении ошибка больше не появится.

Дивья
источник
1

Это случилось со мной, когда я использовал плагин Eclipse и синхронизировал его. В файле, вызывающем проблему, не было локальных изменений (и фактически не было удаленных изменений с момента моего последнего обновления). Я выбрал «возврат» для файла без каких-либо других изменений в файлах, и все вернулось к норме.

Джейсон Мереки
источник
1

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

codeanimalsAsGuest
источник
1

Если с вами работает коллега:

1) попросите его переименовать файл, вызывающий проблемы, и commit

2) вы update(теперь вы видите файл с неверной контрольной суммой с другим именем)

3) переименуйте его обратно в исходное имя

4) commit(и попросите коллегу updateвернуть имя файла в исходное состояние)

Это решило проблему для меня.

Петко Костов
источник
1

Я нашел очень хорошее решение, которое решило мою проблему. Хитрость заключается в том, чтобы отредактировать svn DB (wc.db).

Решение описано на этой странице: http://www.exchangeconcept.com/2015/01/svn-e155037-previous-operation-has-not-finished-run-cleanup-if-it-was-interrupted/

Если ссылка не работает, просто посмотрите и следуйте этим инструкциям: введите описание изображения здесь

Я использовал инструмент sqlite из http://sqlitebrowser.org/ .

Алексей Бондарев
источник
1

Я использую Tortoise SVN, после того, как все решения на этой странице не работают,

Я наконец создаю резервную копию проблемного файла. и используйте для Repo Browserудаления проблемного файла в нем, затем обновите локальную папку, чтобы файл в локальной папке был удален. Затем скопируйте файл резервной копии, и Add > Commitя смогу успешно обновить.

Единственный минус этого метода - история этого файла будет удалена.

Ю Ян Цзянь
источник
0

Чтобы решить эту проблему, выполните следующие действия:

  1. Откройте файл записей, расположенный в каталоге .svn, в котором возникает ошибка.
  2. Найдите запись для файла, выдающего ошибку, и замените ожидаемое значение фактическим значением ошибки.
  3. Теперь синхронизируй и попробуй обновить.

Если все равно не работает. Попробуйте эти. Это просто обходной путь:

  1. Удалите файл из вашей системы.
  2. Удалите запись файла из файла записей. (Начиная от имени файла до специальных символов).
  3. Теперь синхронизируйте и обновите файл.

Это получит последнюю версию файла из репозитория, и все конфликты будут разрешены.

DeepInJava
источник
0

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

rocketdoctor
источник
0

попробуйте удалить файл и удалить ссылку на файл из файловых записей в каталоге .svn

mocia
источник
0

У меня была аналогичная ошибка и исправлена ​​следующим образом:

(Мое «исправление» основано на предположении, которое может быть верным, а может и не быть, поскольку я не так много знаю о том, как работает Subversion изнутри, но это определенно сработало для меня)

Я предполагаю, что .svn \ text-base \ import.php.svn-base должен соответствовать последней фиксации.

Когда я проверил файл, в котором была ошибка, базовый файл НЕ соответствовал последней фиксации в репозитории.

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

Тогда я смог успешно совершить коммит.

Мендель
источник
0

Мое решение было:

  1. Выполнить очистку svn из файловой системы
  2. Перейти в другую ветку
  3. Решать конфликты
  4. Перейти в "проблемную" ветку
  5. Выполнить очистку из Spring Tool Suite
  6. Выполнить обновление проекта
Алессандро С
источник
0

1. 'обновить до возврата' проверить 'только этот элемент' в каталоге 2. обновить еще раз проверить 'Полностью рекурсивный'

семь фунтов
источник