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 ответ

Решение

Есть три способа:

  1. Добавить отсутствующую папку с помощью коммита перед загрузкой файла дампа: svn mkdir http://server/svn/project/Trunk -m "Created Trunk"
  2. Вручную добавить запись узла, которая создает 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
    
  3. Не использовать svndumpfilter вообще, потому что он не работает по замыслу ( домашняя страницаsvndumpsanitizer имеет хорошее объяснение почему). Существует большая вероятность, что вы столкнетесь с другими ошибками в дальнейшем в вашем дампе.

В настоящее время я нахожусь в процессе разделения дьявольски сложного репо с большим количеством слияний, ходов и других подобных вещей, и я могу сказать, что нет ничего вокруг, что бы правильно обрабатывало разделение SVN-дампов на 100%.

Например, хорошо известный svndumpfilterIN содержит по крайней мере три основных ошибки (мне удалось сообщить только об одной из них, а две другие являются гораздо более злыми) и с треском провалился в моем репо. Я постараюсь поделиться фиксированной версией этого на GitHub через некоторое время, но в его текущем состоянии я не могу рекомендовать это.

Так что, на мой взгляд, ваш лучший шанс - попробовать вышеупомянутый svndumpsanitizer без--redefine-root вариант, потому что он также содержит ошибки (отчет об ошибке приходит). Если вы работаете в Windows, он прекрасно компилируется с последней версией Visual Studio Community 2013(бесплатно).


Обновлено в Y2K17

Последние два абзаца выше уже не актуальны, так как я исправил все проблемы в svndumpfilterIN, которые мешали мне конвертировать репо. Мой PR был объединен с базовым репо, так что попробуйте. Я до сих пор не могу гарантировать 100% успеха, но ваши шансы сейчас намного выше.

Другие вопросы по тегам