Освобождаю место в моем хранилище SVN
У меня есть SVN-репозиторий, размещенный на сайте freemium с максимальным размером репозитория. По мере приближения к этой емкости я узнаю о файлах, которые я зарегистрировал, и которые я могу удалить навсегда, чтобы освободить место на диске. Как мне сказать SVN, что файл можно не только удалить, но и историю?
4 ответа
Как говорит Хьюберт, svnadmin pack
упакует все отдельные файлы репо в каталоге в один большой файл. Это сэкономит вам немного места, но это только откладывает день расплаты за вас. (это должно сделать операции с историей быстрее, так что это хорошее предложение в любом случае). Стоит отметить, что он работает только с разделенными каталогами (т. Е. Новая структура каталогов состоит в том, чтобы поместить 1000 ревизий в один каталог, а затем создать новый каталог), и он упаковывает только старые каталоги сегментов, а не тот, который имеет текущую ревизию. в этом.
Таким образом, ваш единственный вариант - удалить старые ревизии из вашей истории. Это требует svnadmin dump and load, с дополнительным фильтром для удаления каталогов в вашем репо, который вам больше не нужен. (например, старые временные ветви).
Сбросить легко: svnadmin dump -r xxx:HEAD
где xxx - самая старая ревизия, которую вы хотите сохранить (т. е. она сбросит самые последние ревизии, поэтому ваши древние ревизии будут удалены, как и архивирование). Вы можете сохранить архив старых ревизий, сбросив их тоже (svnadmin dump -r 1:xxx
)
Когда у вас есть дамп-файл, его загрузка так же проста, как и запуск загрузки svnadmin в имени дамп-файла. может быть хорошей идеей удалить старый репозиторий перед загрузкой нового - тогда вы получите преимущество от последних свойств файловой системы сервера, если у вас их еще нет.
Если вы хотите сохранить все старые ревизии, но отфильтровать определенные каталоги, вам нужно запустить файл дампа через svndumpfilter, который удалит указанные пути. Имейте в виду, что вы хотите создать дамп без использования опции --incremental.
Очевидно, протестируйте все операции локально - создайте дамп в локальный файл, затем загрузите его во временное хранилище на локальном диске (это тоже будет быстрее) и проверьте, что история и последняя версия работают нормально - я экспортирую последнюю версию в каталог и используйте winmerge, чтобы убедиться, что файлы идентичны экспорту последней ревизии из репозитория. Попробуйте тоже с исторической ревизией, если хотите быть параноиком.
Из FAQ по Subversion:
У проекта есть планы... когда-нибудь реализовать команду svnadmin obliterate, которая будет выполнять задачу постоянного удаления информации.
...
В то же время, единственным выходом для вас является svnadmin создать дамп хранилища, а затем передать дамп-файл через svndumpfilter (исключая неверный путь) в команду загрузки svnadmin.
Вы не можете удалить файл из репозитория SVN без выполнения svnadmin dump; svndumpfilter; svnadmin load
танец. Вы можете уменьшить размер хранилища, если вы используете FSFS, просто запустите svnadmin pack
в каталоге репо.
Обычно плохая идея удалять файлы из репозитория под контролем версий.
Я не уверен, что понял правильно, но вот как я это понимаю. Контроль версий - это уникальные контрольные суммы. Если вы удалите что-то, существует риск повторного использования этих контрольных сумм, что приводит к конфликтам. Это просто не стоит уменьшать проблему с нехваткой места на диске, лучше обновите свой тарифный план.