Ошибка загрузки svnadmin - файл уже существует - PullRequest
4 голосов
/ 02 августа 2011

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

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

Когда я запускаю команду svnadmin load, я получаю следующую ошибку:

<<< Started new transaction, based on original revision 1
     * adding path : ---------------- ...svnadmin: File already exists: filesystem 'C:\
Repositories\repname\db', transaction '2788-25k', path '----------------'

Есть идеи, как я могу их объединить? Если это вообще возможно, конечно ...

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Вы должны начать все заново со свежего репозитория и сначала загрузить транзакции из исходного репозитория.

svnadmin dump recovered-repo > dumpfile
svnadmin load new-repo < dumpfile

Затем загрузить новые транзакции с конца текущего репозитория, в котором вы работали с тех пор.авария.Обязательно укажите свои ревизии, чтобы брать только новые вещи.

svnadmin dump current-repo -r firstnewrev:lastnewref --incremental > newdumpfile
svnadmin load new-repo < newdumpfile

Поскольку у меня нет никаких репозиториев для тестирования, на самом деле я не проверял это, так что будьте осторожны и не связывайтесь свсе, что вы не сделали резервную копию.См. Бесплатную онлайн-книгу для получения дополнительной помощи: http://svnbook.red -bean.com /

1 голос
/ 14 октября 2011

Я столкнулся с этой проблемой, когда нам пришлось перенести старый CVS-репозиторий поверх cvs2svn.Этот процесс работал отлично, но мы сначала пропустили некоторые проекты из CVS, и команда также сделала некоторые коммиты в CVS после свершившегося факта.Итак, наш последующий дамп SVN содержал следующую комбинацию: * Новые проекты, которых раньше не было в SVN * Существующие проекты уже были перенесены в SVN, но с более новыми коммитами.

Это была вторая часть, которая вызывала конфликты при загрузке.*

Таким образом, вместо того, чтобы перенастроить все репозитории CVS (что заняло бы часы и часы), я просто использовал наш старый друг svndumpfilter для удаления конфликтующих путей.

  1. Фильтрация последнего файла дампа для исключенияконфликт (оставьте исходный файл дампа на месте, он понадобится позже)
  2. Запустите импорт (в репозитории теперь есть последние из всех проектов, кроме конфликта)
  3. Теперь отфильтруйте последний дамп, чтобы ТОЛЬКО включить конфликт (используетсяпозже)
  4. Запустить дамп существующего репозитория SVN, исключая конфликтующий путь
  5. Фильтровать файл последнего дампа для включения только конфликта
  6. Создать новый пустой репозиторий
  7. Переместитьстарый репозиторий в безопасном месте
  8. Импорт обоих отфильтрованных дампов в новый репозиторий

    [svnrepos]$ svndumpfilter exclude conflict-path < latestRepo.dump > repo_filtered_woConflicts.dump
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
    [svnrepos]$ svndumpfilter include conflict-path < latestRepo.dump > repo_filtered_ConflictsOnly.dump 
    [svnrepos]$ svnadmin dump REPONAME | svndumpfilter exclude conflict-path > repo_filtered_woConflicts.dump #overwrites previous filter
    [svnrepos]$ mv REPONAME REPONAME_old
    [svnrepos]$ svnadmin create REPONAME
    [svnrepos]$ chmod -R g+rwx REPONAME # if shared by apache
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
    [svnrepos]$ svnadmin load REPONAME < repo_filtered_ConflictsOnly.dump

...