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