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 на отфильтрованном дампе. Есть идеи?


person Josh M.    schedule 22.07.2014    source источник


Ответы (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). есть хорошее объяснение, почему). Есть большая вероятность, что дальше в дампе вы столкнетесь с другими ошибками.

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

<удар>

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

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


Обновлено в Y2K17

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

person beatcracker    schedule 09.02.2015
comment
Спасибо, я точно не помню, как я это исправил, но, кажется, я вручную отредактировал файл и добавил отсутствующие файлы/папки, где это необходимо. - person Josh M.; 09.02.2015