У меня есть особая ситуация, когда мне нужно удалить операции серии коммитов в хранилище Subversion. Все содержимое (/ trunk / tags / branch) было помечено и впоследствии удалено, когда ошибка была обнаружена. Я бы просто использовал svndumpfilter для удаления узлов, нарушающих работу, но кто-то повторно использовал неверное имя тега на более позднем этапе, поэтому исключения на основе пути вызовут другие проблемы. Мне нужно вручную редактировать файл дампа, который составляет 12 ГБ.
У меня есть серия из 15 последовательных ревизий, которые мне нужно отредактировать, которые появляются в дампе в следующем формате:
Revision-number: 60338
Prop-content-length: 143
Content-length: 143
K 7
svn:log
V 41
Tagging test prior to creating xx branch
K 10
svn:author
V 7
userx
K 8
svn:date
V 27
2009-05-27T15:01:31.812916Z
PROPS-END
Node-path: test/tags/XX_8_0_FINAL
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 60337
Node-copyfrom-path: test
На основании проведенного тестирования я знаю, что для перехода к следующему разделу мне нужно:
Revision-number: 60338
Prop-content-length: 112
Content-length: 112
K 7
svn:log
V 38
This is an empty revision for padding.
K 8
svn:date
V 27
2009-05-27T15:01:31.812916Z
PROPS-END
Есть еще 14 ревизий, в которых требуется такая же замена.
Попытка редактировать файлы вручную в VIM серьезно нецелесообразна. Файлы дампа представляют собой смесь двоичного и ascii текста.
Если бы у кого-нибудь была какая-нибудь магия awk / sed, которая могла бы мне помочь, я был бы очень благодарен.