Загрузка Svnadmin из dumpfile вызывает ошибку "файл не найден". Помогите?
Дано:
Repository_1 - источник
Repository_2 - destination
Я создал файл дампа Repository_1/Folder1, используя комбинацию svnadmin и svndumpfilter
При загрузке из файла дампа из Репозитория_1/Папка1 в Репозиторий_2/Магистральная все в порядке НО
При загрузке из Repository_1/Folder1/Sub-folder (создается другой дамп для этого) в Repository_2/trunk, я получаю следующую ошибку:
svnadmin: File not found: transaction '267-89', path 'trunk/Folder1/Sub-folder'
Может ли кто-нибудь объяснить?
Ответы
Ответ 1
Оказывается, что структура (пустые папки) в месте назначения должна быть предварительно создана.
Так,
Если вы хотите сделать это:
При загрузке из Repository_1/Folder1/Sub-folder (создается другой дамп для этого) в Repository_2/trunk
вам нужно создать эту структуру в СВН
Repository_2/багажник/Folder1
Примечание: вам нужно создать только родителей, а не папку, поэтому НЕ СОЗДАТЬ Repository_2/trunk/Folder1/Sub-folder
Ответ 2
вы получите эту ошибку, если кто-то скопировал что-то из соединительной линии/Папки 1 в магистраль/Папка 1/Под-папка. поскольку в вашем дампе вы включили только тулбар/папку/подкаталог, он больше не может найти требуемые файлы из магистрали/папки1 и останавливается с этой ошибкой.
чтобы решить эту проблему, вам нужно будет включить все в дамп, который был источником копии.
Ответ 3
Я только что испытал эту ошибку, которую я проследил до последнего обновления сервера и цикла svnadmin dump/load
. Проблема заключалась в том, что я настроил репозиторий в другом каталоге на тот, в котором он был создан.
На старой машине я использовал inetd.conf
для запуска svnserve
:
svnserve -r /var/svn/main
и репозиторий находился в /var/svn/main
Однако на новой машине я имел inetd.conf
, указывающий на /var/svn
:
svnserve -r /var/svn
У меня уже была проверка со старого сервера, поэтому, когда я попытался зафиксировать путь назначения, не существовал, потому что случайно добавил в URL другого компонента, поэтому svn://host/source/trunk
стал svn://host/main/source/trunk
.
Я мог бы исправить это, перемещая каталоги вокруг, но вместо этого я решил переписать URL рабочей копии с помощью svn switch --relocate
.
Примечание. Быстрая диагностика, чтобы определить, является ли это проблемой, - это изменить каталог в рабочей копии, введите svn info
, чтобы получить URL-адрес репозитория, а затем введите svn ls <myUrl>
. Если это дает ошибку No repository found
, то вы знаете, что это причина.
Ответ 4
Как отмечено в этот поток, svnrdump
работает иначе, чем svndump
.
svndump
+ svndumpfilter
:
- Сбрасывает всю историю репозитория, затем фильтрует нужные вещи. Это занимает много времени на больших репозиториях, даже если вы просто хватаете крошечное поддерево.
- Создает файл дампа, который, вероятно, разбит несколькими способами, например, создает файлы в каталогах, которые не существуют или копируют файлы из путей, которые не существуют.
svnrdump
:
- Создает самосогласованный файл дампа.
- Требуется подпуть, если вы хотите сделать эквивалент
svndumpfilter include
. Например, svnrdump https://server.example.com/svn/repo/branches/1.4
будет захватывать все изменения, влияющие на /branches/ 1.4.
- Может потребоваться дополнительная
| svndumpfilter include / --drop-all-empty-revs --renumber-revs
.
Нижняя строка: svnrdump
, вероятно, будет работать лучше.
Ответ 5
Загрузка дампа завершилась неудачно, потому что создание trunk/Folder1
было отфильтровано svndumpfilter. Согласно это сообщение в блоге, эти шаги необходимы на дампе:
Вы можете создать trunk/Folder1 в дампе, отредактировав сам дамп и добавить в первую ревизию следующий блок:
Node-path: trunk/Folder1
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10
PROPS-END
Этот блок должен быть вставлен в блоки реквизитов первой ревизии.
Затем дамп может быть загружен с помощью svnadmin.