проблемы с svndumpfilter не исключая пути - PullRequest
4 голосов
/ 22 декабря 2011

Я получаю странные результаты от svndumpfilter - мне нужно уничтожить 24 экземпляра 2 конкретных файлов в нашем репо, разбросанных по многим веткам.Я запускаю команду, как описано в документации:

например

type dumpfile | svndumpfilter exclude foo1/bar.dat foo2/bar.dat  > filtered_dumpfile

Однако, похоже, что отфильтрованный файл дампа не удаляет все узлы, как ожидалось, а только удаляет 2. У меня естьподтвердил это, используя svndumptool diff для двух файлов дампа, и после восстановления репозитория все еще присутствуют исключенные файлы.

Я уверен, что не пропустил ни одного экземпляра этих файлов, так как использовал дерево svnlook длянайти все пути в репо.Также я подтвердил, что начальные косые черты соответствуют в команде и в файле дампа.

У кого-нибудь есть идеи?

Ответы [ 4 ]

2 голосов
/ 05 декабря 2012

Запись в Apache Subversion FAQ , которая связана с вопросом, была недавно обновлена ​​новым подходом, позволяющим фильтровать историю репозитория.Сложная фильтрация истории репозитория может быть немного более удобной, чем при подходе svndumpfilter.

Вы можете реплицировать репозиторий с помощью инструмента svnsync после настройки правил авторизации на основе пути , которые запретить доступ на чтение любых путей, которые необходимо отфильтровать из истории хранилища.

В отличие от svndumpfilter, svnsync автоматически преобразует операции копирования с нечитаемым исходным путем в обычные добавления,что полезно, если необходимо отфильтровать историю операций копирования.

0 голосов
/ 29 мая 2014

Мои файлы, которые мне нужно было стереть, были последней проверкой в ​​истории. Поэтому я смог использовать дамп svnadmin, чтобы получить дамп всех оборотов до сломанного оборота.

Это похоже на то, что описано на этой странице: http://robmayhew.com/delete-parts-of-subversion-history/

Мне нужно было избавиться от ошибки проверки на 8195-й версии, поэтому я запустил что-то вроде этого:

svnadmin dump /path/to/current/repo -r0:8194 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump

Это сработало, за исключением того, что в моей извлеченной рабочей копии все еще была информация от 8195. Это вызвало ошибку при попытке обновления, так как версия, в которой моя рабочая копия находилась на сервере, не существовала.

Мне нужно было сделать небольшую проверку и где-нибудь внести тривиальное изменение, чтобы вернуть версию репозитория до 8195, затем я мог очистить и обновить свою рабочую копию после удаления файлов, затронутых неудачной регистрацией. Это работало с использованием SVN в Linux.

Сотрудник использует svn в Windows, и Tortoise svn действительно трудно обойти это исправление хранилища. По-видимому, он хранит собственный внутренний кеш последней ревизии, а когда обновляет рабочую копию, он восстанавливает «плохие» файлы ревизий из своего кеша. Я думаю, что мне придется проверить все снова и создать новую рабочую копию, чтобы сделать это правильно.

0 голосов
/ 05 декабря 2012

Вы можете добавить все префиксы в файл и использовать опцию --targets FILE вместо отдельного исключения | include

0 голосов
/ 19 января 2012

Вы можете попытаться сделать это следующим образом, может быть, это поможет:

type dumpfile | svndumpfilter exclude foo1/bar.dat | svndumpfilter exclude foo2/bar.dat  > filtered_dumpfile

или так:

svndumpfilter exclude `cat filterlist.txt` < old.dump > new.dump
...