SVNDumpFilter меняет пути перед их добавлением?
Я использую svndumpfilter
извлекать отдельные проекты из больших репо и импортировать их в свои собственные репо. Что-то вроде этого:
svndumpfilter include --drop-empty-revs --renumber-revs Trunk/Source/Project1 < full.dump > Project1.dump
С одним проектом все работало нормально, но во втором я заметил, что полученный отфильтрованный дамп не начинается с добавления пути. Смотрите первые две версии (перенумерованы):
SVN-fs-dump-format-version: 2
UUID: c6612063-4e6b-459c-a579-78605fb1e4b5
Revision-number: 0
Prop-content-length: 56
Content-length: 56
K 8
svn:date
V 27
2010-05-11T20:45:07.903005Z
PROPS-END
Revision-number: 1
Prop-content-length: 128
Content-length: 128
K 7
svn:log
V 27
Fixed code after branching.
K 10
svn:author
V 6
somedude
K 8
svn:date
V 27
2010-09-21T23:07:51.719341Z
PROPS-END
Node-path: Trunk/Source/Project1/Project1.csproj
Text-content-md5: 9d127596909e2a9921f1ec1c0223e1ed
Node-action: change
Text-content-sha1: 22eb675e0a5bfb41092de6ed39dc7c4d2a15dbd5
Node-kind: file
Text-content-length: 5178
Content-length: 5178
Обратите внимание, как оно пытается "изменить" Trunk/Source/Project1/Project1.csproj
прежде чем он вообще это добавил? Не удивительно, я получаю "файл не найден" при запуске svnadmin load
на отфильтрованной свалке. Есть идеи?
1 ответ
Есть три способа:
- Добавить отсутствующую папку с помощью коммита перед загрузкой файла дампа:
svn mkdir http://server/svn/project/Trunk -m "Created Trunk"
Вручную добавить запись узла, которая создает
Trunk
папка в дамп:Revision-number: 1 Prop-content-length: 128 Content-length: 128 K 7 svn:log V 27 Fixed code after branching. K 10 svn:author V 6 somedude K 8 svn:date V 27 2010-09-21T23:07:51.719341Z PROPS-END Node-path: Trunk/ Node-kind: dir Node-action: add Prop-content-length: 48 Content-length: 48 PROPS-END Node-path: Trunk/Source/Project1/Project1.csproj Text-content-md5: 9d127596909e2a9921f1ec1c0223e1ed Node-action: change Text-content-sha1: 22eb675e0a5bfb41092de6ed39dc7c4d2a15dbd5 Node-kind: file Text-content-length: 5178 Content-length: 5178
Не использовать
svndumpfilter
вообще, потому что он не работает по замыслу ( домашняя страницаsvndumpsanitizer имеет хорошее объяснение почему). Существует большая вероятность, что вы столкнетесь с другими ошибками в дальнейшем в вашем дампе.
В настоящее время я нахожусь в процессе разделения дьявольски сложного репо с большим количеством слияний, ходов и других подобных вещей, и я могу сказать, что нет ничего вокруг, что бы правильно обрабатывало разделение SVN-дампов на 100%.
Например, хорошо известный svndumpfilterIN содержит по крайней мере три основных ошибки (мне удалось сообщить только об одной из них, а две другие являются гораздо более злыми) и с треском провалился в моем репо. Я постараюсь поделиться фиксированной версией этого на GitHub через некоторое время, но в его текущем состоянии я не могу рекомендовать это.
Так что, на мой взгляд, ваш лучший шанс - попробовать вышеупомянутый svndumpsanitizer без--redefine-root
вариант, потому что он также содержит ошибки (отчет об ошибке приходит). Если вы работаете в Windows, он прекрасно компилируется с последней версией Visual Studio Community 2013(бесплатно).
Обновлено в Y2K17
Последние два абзаца выше уже не актуальны, так как я исправил все проблемы в svndumpfilterIN, которые мешали мне конвертировать репо. Мой PR был объединен с базовым репо, так что попробуйте. Я до сих пор не могу гарантировать 100% успеха, но ваши шансы сейчас намного выше.