Svnsync не может синхронизировать репозиторий - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть доступ на чтение к удаленному хранилищу Subversion, и я хочу клонировать его через svnsync.Синхронизация начинается нормально и прогрессирует хорошо, но ближе к концу я получаю ошибку, которая выглядит так:

Transmitting file data ...svnsync: File not found: transaction '12893-qyy', path
 '/project_name/trunk/path/to/file.cpp'

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

Можно ли заставить svnsync игнорировать эту ошибку и продолжить синхронизацию?У меня нет доступа администратора к хранилищу, поэтому я не могу это исправить.

ОБНОВЛЕНО: Ответы на комментарии: я проверил тот же клиент Subversion, что и на сервере (1.6.6), последняя стабильная версия (1.6.17)и бета-версия (1.7).Все дает точно такую ​​же ошибку.Кроме того, я могу успешно извлечь «поврежденный» репозиторий: последняя ревизия, ревизия, о которой идет речь (12893), ревизия до нее (12892) и ревизия после нее (12894) без каких-либо ошибок.

ОБНОВЛЕНО: Отвечая на другие комментарии:Журнал SVN показывает, что в ревизии 12892 папка 'to' была перемещена из /repo/other_project/trunk/source_path в /repo/project_name/trunk/path

1 Ответ

7 голосов
/ 14 сентября 2011

Учитывая, что вы можете проверять ревизии до и после этого, я думаю, у вас нет повреждений хранилища. svnsync работает путем «воспроизведения» транзакций, а не для зеркалирования данных или чего-то в этом роде. Таким образом, могут быть ошибки, которые мешают воспроизвести транзакцию. Я предполагаю, что что-то об этом коммите вызвало ошибку. Вы можете запустить svn log -c 12893 -v, чтобы посмотреть ревизию более подробно. Я предполагаю, что в нем есть что-то вроде «R», которое вызывает проблему. Вы можете собрать информацию и отправить ее по адресу users@subversion.apache.org, чтобы ее можно было проанализировать и, возможно, исправить.

Вот еще несколько идей:

  • Как осуществляется доступ к хранилищу источника? file: // http: // etc. Если это http: //, вы можете попробовать перейти с использования HTTP-библиотеки по умолчанию Neon на Serf и посмотреть, есть ли проблема. Вы можете сделать это, добавив --config-option = servers: global: http-library = serf к команде svnsync при ее запуске. Стоит попробовать.

  • Проверьте, можете ли вы сбросить ревизию. дамп svnadmin -r12892: 12893 - существительное имя репозитория> файл дампа

  • Если вы можете сбросить ревизию, затем загрузить ее можно вручную в целевой репозиторий, используя загрузку svnadmin.

  • Если вы можете загрузить ревизию, то вы можете вручную исправить свойства svnsync, чтобы он знал, что выполнил эту ревизию. svn ps --revprop -r0 svn: sync-last-merged-rev 123893 url: // to / mirror

ОБНОВЛЕНО: Проблема была решена с помощью новой утилиты svnrdump из Subversion 1.7 RC2.

...