Восстановить контрольную сумму SVN
Вопрос
Я использую subclipse в Flex Builder 3 и недавно получил эту ошибку при попытке фиксации:
svn: Checksum mismatch for '/Users/redacted/Documents/Flex Builder 3/path/to/my/file.mxml'; expected: 'f8cb275de72776657406154dd3c10348', actual: 'null'
Я обошел это с помощью:
- Фиксируем все остальные измененные файлы, опуская самый проблемный.
- Копирование содержимого файла проблем в окно TextMate
- Удаление моего проекта в FlexBuilder / Eclipse
- Проверяю свой проект только что из SVN
- Копирование текста файла проблем обратно из окна TextMate
- Внесение изменений.
Это сработало, но я не могу не думать, что есть способ получше.Что на самом деле происходит, чтобы вызвать ошибку svn: checksum, и что лучше всего исправить?
Может быть, более важно - является ли это симптомом более серьезной проблемы?
Решение
Файл в каталоге .svn, который отслеживает, что вы извлекли, когда, из какой редакции и откуда, каким-то образом был поврежден для этого конкретного файла.
Это не более опасно или критично, чем обычная проблема с нечетным файлом, и может быть вызвано различными проблемами, такими как сбой программы subversion в середине смены, перебои в подаче питания и т.д.
Если это не повторится еще раз, я бы не стал придавать этому большого значения.
Это можно исправить, выполнив то, что вы сделали, - сделайте копию ваших рабочих файлов, проверьте новую копию и добавьте измененные файлы обратно.
Обратите внимание, что это может вызвать проблемы, если у вас загруженный проект, в котором вам обычно приходится вносить изменения.
Например, вы и коллега просматриваете свежую копию и начинаете работать с одним и тем же файлом.В какой-то момент ваш коллега проверяет свои модификации.Когда вы пытаетесь сделать то же самое, вы получаете проблему с контрольной суммой, которая у вас есть.Если вы сейчас сделаете копии своих измененных файлов, выполните новую проверку, то subversion потеряет представление о том, как ваши изменения должны быть объединены обратно.
Если бы вы не столкнулись с проблемой в этом случае, когда вы удосужились проверить свои изменения, вам нужно было бы сначала обновить свою рабочую копию и, возможно, уладить конфликт с вашим файлом.
Однако, если вы выполните новую проверку с изменениями ваших коллег, теперь будет выглядеть так, будто вы удалили его изменения и заменили их своими собственными.Никаких конфликтов и никаких указаний со стороны subversion на то, что что-то не так.
Другие советы
Для этого также есть более простая причина, чем просто ошибки, повреждение диска и т.д.Я думаю, что наиболее вероятная причина, по которой это происходит, заключается в том, что кто-то пишет рекурсивную замену текста в рабочей копии, не исключая файлы .svn.
Это означает, что нетронутые копии файлов (в основном базовая версия файлов, которая хранится внутри административной области .svn) изменяются, и это делает недействительной сумму MD5.
@Эндрю Хеджес:это также объясняет, почему ваше решение исправляет эту проблему.
SVN хранит нетронутые копии всех файлов, которые вы извлекаете, в каталогах .svn.Это называется текстовой базой.Это обеспечивает быстрое изменение и разворот.Во время различных операций SVN проверяет контрольные суммы для этих текстовых файлов, чтобы выявить проблемы с повреждением файлов.
Как правило, несоответствие контрольной суммы SVN означает, что файл, который не должен был быть изменен, был каким-то образом изменен.Что это значит?
- Повреждение диска (неисправный жесткий диск или IDE-кабель)
- Плохая ОПЕРАТИВНАЯ память
- Плохое сетевое соединение
- Какой-то фоновый процесс изменил файл за вашей спиной (вредоносное ПО)
Все это плохо.
ОДНАКО, - Я думаю, ваша проблема в другом.Посмотрите на сообщение об ошибке.Обратите внимание, что он ожидал несколько MD5-хэшей, но вместо этого получил обратно 'null'.Если бы это была простая проблема с повреждением файла, я бы ожидал, что у вас было бы два разных MD5-хэша для ожидаемого / полученного.Тот факт, что у вас есть "null", подразумевает, что что-то еще не так.
У меня есть две теории:
- Ошибка в SVN.
- У чего-то была эксклюзивная блокировка файла, и MD5 не смог сработать.
В случае #1 попробуйте выполнить обновление до последней версии SVN.Возможно, также разместите это в списке рассылки svn-devel (http://svn.haxx.se), чтобы разработчики могли это видеть.
В случае с # 2 проверьте, не заблокировал ли что-нибудь файл.Вы можете загрузить копию Process Explorer для проверки.Обратите внимание, что вы, вероятно, захотите посмотреть, у кого есть блокировка на текстовая база файл, а не сам файл, который вы пытались зафиксировать.
Иногда я получаю подобные сообщения, обычно с файлами, к которым никто не приближался неделями.Как правило, если вы знаете, что не работали в соответствующем каталоге, вы можете просто удалить каталог с проблемой и запустить
svn update
чтобы воссоздать его.
Если у вас есть текущие изменения в каталоге, то, как предложили lassevk и вы сами, требуется более тщательный подход.
Вообще говоря, я бы сказал, что это хорошая идея - не оставлять отредактированные файлы незафиксированными и содержать рабочую копию в порядке - не добавляйте в рабочую копию целую кучу дополнительных файлов, которые вы не собираетесь использовать.Регулярно выполняйте фиксацию, а затем, если рабочая копия выйдет из строя, вы можете просто удалить все это и начать сначала, не беспокоясь о том, что вы можете потерять, а что и нет, и не мучаясь попытками выяснить, какие файлы сохранить.
Только сегодня мне удалось исправить эту ошибку, удалив копию поврежденного каталога в /tmp и заменив файлы в .svn/text-base на только что созданные.Я описал эту процедуру в некоторых деталях здесь, в моем блоге. Мне было бы интересно услышать от более опытных пользователей SVN, каковы преимущества и недостатки каждого подхода.
попробуй:svn up --принудительный файл.c
Это сработало для меня без необходимости делать что-либо дополнительное
Я наблюдал множество решений, начиная с исправления файла .svn/ entries и заканчивая новой проверкой.
Это может быть по-новому (спасибо моему коллеге).:
- go to work directory where recorder/expected checksum issue occured
- call "svn diff" and make sure that there isnt any local modifications
- cd ..
- remove trouble file's directory with "rm -rf"
- issue "svn up" command, svn client will restore new fresh files copies
Мэтт, есть более простой способ, чем ты описал - изменить контрольную сумму в файле .svn/entries.Вот полное описание:http://maymay.net/blog/2008/06/17/fix-subversion-checksum-mismatch-error-by-editing-svnentries-file/
Другой, возможно, даже более страшный способ устранения конфликтов контрольных сумм, который я обнаружил, заключается в следующем:
ПРЕДОСТЕРЕЖЕНИЕ: Убедитесь, что ваша локальная копия является наиболее известной версией И что кто-либо еще в вашем проекте знает, что вы делаете!(на случай, если это еще не было очевидно).
если вы знаете, что ваша локальная копия файла "хорошая", вы можете напрямую удалить файл с SVN-сервера, а затем принудительно зафиксировать вашу локальную копию.
синтаксис для прямого удаления:
svn delete -m "deleting corrupted file XXXX"
svn+ssh://username@svnserver/path/to/XXXX
удачи вам!
J
В качестве альтернативы извлечению новой копии (что мне также пришлось сделать после того, как я попробовал все другие варианты) и объединению всех ваших изменений, которые вы ранее сохранили, следующий подход работал таким же образом, но сэкономил мне значительное количество времени и, возможно, некоторые ошибки:
- Ознакомьтесь со свежей рабочей копией
- Скопируйте папку .svn из вашей новой копии в вашу поврежденную копию
- Вуаля
Конечно, на всякий случай вам следует создать резервную копию вашей исходной поврежденной рабочей копии.В моем случае я мог удалить его после того, как закончил, так как все прошло нормально.
Это произойдет, если папка .svn повреждена.Решение:Удалите всю папку, содержащуюся в файле, и снова извлеките папку.
Из-за этой проблемы все наши виртуальные машины для разработки являются * nix нашими рабочими станциями win32.какой-то дурак (ы) создал файлы с одинаковыми именами (другой регистр) в поле * nix внезапно происходит сбой проверки в Win32...поскольку win не знает, для какого из 2 файлов с одинаковыми именами используется MD5, проверки в * nix прошли нормально...оставляя нас немного почесать в затылках
Я смог обновить репозиторий в окне win, скопировав папки ".svn" из окна * nix с хорошей рабочей копией.еще предстоит выяснить, можно ли очистить репозиторий до такой степени, чтобы мы могли снова выполнить полную проверку
Еще один простой способ....
- Обновите свой проект, чтобы получить последнюю версию
- проверьте ту же версию в другой папке
- замените папку .svn из новой проверки на рабочую копию ( я заменил файлы .svn-base)
- Извлеките только папку с проблемным файлом из репозитория в какое-нибудь другое место.
- Убедитесь, что
.svn\text-base\<problematic file>.svn-base
идентичен тому, который был проверен. - Убедитесь, что проблемный раздел файла (все строки раздела) в
.svn\entries
идентичен тому, который был проверен.
Вы не поверите, но я действительно исправил свою ошибку, удалив <scm>...</scm>
позиция из оскорбительного файла pom.xml Я надеялся проверить.Он содержал URL репозитория subversion, в котором он зарегистрирован (для этого и предназначен параметр Maven!), Но каким-то образом он сгенерировал неверную контрольную сумму для файла при регистрации.
Я буквально перепробовал все вышеупомянутые методы исправления этого, но безрезультатно.Сталкивался ли я с очень редкой ситуацией, когда генератор контрольной суммы недостаточно надежен?
Я также наткнулся на эту проблему и пытался найти быстрые решения, попробовал некоторые из решений, приведенных в этой теме.Вот как я решил эту проблему в своей среде разработки (для меня это были минимальные изменения):
1- Локально удаленный каталог, в котором был поврежден файл (WEB-INF):
svn: Checksum mismatch for 'path-to-folder\WEB-INF\web.xml':
expected: d60cb051162e4a6790a3ea0c9ddfb434
actual: 16885ded2cbc1adc250e4cbbc1427546
2- Скопированный и вставленный каталог (WEB-INF) из новой проверки
3- Обновил svn, теперь Eclipse / TortoiseSVN начал показывать конфликт в этом каталоге
4- Отмечен конфликт как разрешенный
Это сработало, я смог обновить, зафиксировать ранее поврежденный web.xml
В моем случае сумма была другой.Все, что я сделал, это:
1) Перенесите проверку в отдельную папку
2) Замените файлом из этой папки в каталоге .svn на мой проблемный файл проекта, который был указан в сообщении об ошибке svn-клиента
3) ..Прибыль!
Хотя это старая проблема, я подумал, что тоже отдам свои 2 цента, поскольку я только что боролся с проблемой больше часа.
Приведенные выше решения либо не сработали для меня, либо показались чересчур сложными.
Мое решение состояло в том, чтобы просто удалить все папки svn из проекта.
find . -name .svn -exec rm -rf {} \;
После этого я снова выполнил простую проверку проекта.Таким образом, я оставил все мои незакрепленные файлы нетронутыми, но все равно получил перестроение всех файлов svn.
У меня возникла эта проблема в ubuntu 14.04, и я решил ее, выполнив следующие действия:
- $ cd /var/www/MyProject
- обновление $ svn
- обновление $ svn
после этих шагов я смог зафиксировать файл без ошибок.
- Перейдите к папке, вызывающей проблему
- Выполнить команду
svn update --set-depth empty
- Эта папка опустеет и вернет пустую папку обратно
- Синхронизируйте с svn и обновите.
Эта работа для меня.
вот как я исправил проблему - v просто, но, согласно jsh выше, нужно быть уверенным, что ваша копия лучшая.
просто
- скопируйте все проблемные файлы в ту же папку.
- удалите старые с помощью svn rm
- совершить.
- затем переименуйте копии обратно в исходные имена файлов.
- повторите попытку.
подозреваю, что это, вероятно, уничтожает все виды истории изменений в этом файле, так что это довольно уродливый способ сделать это...