2008-11-19 3 views
23

Как я могу обрезать старые версии из моего репозитория subversion для разработки? Я держу песочницу subversion, в которой у меня много тестовых проектов, двоичных файлов и т. Д. Я бы иногда хотел обрезать историю.Как отрезать старые версии в Subversion?

+0

Аналогичный вопрос: http://stackoverflow.com/questions/1294568/how-to-erase-sensitive-information-from-subversion – sleske 2013-02-07 19:12:18

ответ

27

Вот официальный ответ:

Существуют особые случаи, когда вы можете захотеть, чтобы уничтожить все доказательства файла или фиксации. (Возможно, кто-то случайно передал конфиденциальный документ.) Это не так просто, потому что Subversion намеренно предназначена для того, чтобы никогда не потерять информацию. Перемены - это неизменные деревья, которые строится друг на друге. Удаление ревизии из истории вызовет эффект домино, создавая хаос во всех последующих ревизиях и, возможно, аннулирует все рабочие копии.

У проекта есть планы, однако, когда-нибудь реализовать команду стирания svnadmin, которая выполнит задачу по постоянному удалению информации. (См. Вопрос 516.)

Тем временем ваш единственный ресурс - это svnadmin сбрасывает ваш репозиторий, а затем передает файл дампа через svndumpfilter (исключая неудачный путь) в команду загрузки svnadmin. Подробнее об этом читайте в главе 5 книги Subversion.

Найдено здесь: http://subversion.tigris.org/faq.html#removal

4

Вы можете использовать svndumpfilter.

Однако это действительно не рекомендуется. Хранилища должны быть (в основном) базами только для добавления. Некоторое количество мутаций данных допустимо благодаря централизованному характеру базы данных, но это не должно быть рутинной операцией.

Возможно, вы должны использовать отдельный репозиторий для каждого проекта, а не один репозиторий мешков, который вы хотите время от времени отрезать.

2

Вы действительно не хотите обрезать историю, так что это безумие.

Возможно, вы захотите удалить старые ветви, чтобы они не отображались в вашем браузере svn, но это так же просто, как «svn rm». Изменения остаются в системе контроля версий.

5

Jon - Мы не согласны. Бывают случаи, когда уместно обрезать «очень старые» данные, которые, как мы уверены, больше не понадобятся, поскольку они резервируются на некоторых других носителях. Возьмем, к примеру, систему, которая автоматически отслеживает версии файлов конфигурации. В какой-то момент имеет смысл сказать: «Мы знаем, что нам больше не нужно иметь конфигурацию так, как она выглядела год назад, чтобы быть в режиме онлайн. Имея эту информацию в каком-то автономном формате, это нормально, но оставляя ее он-лайн в производственных системах не очень хорошо ». Это прекрасный пример того, когда уместно иметь возможность легко архивировать очень старые данные, а затем отсекать его из репозитория. Я нашел способ решить эту проблему, но я считаю, что это настоящий хак, который я должен эффективно воспроизводить в истории с определенного момента времени через все версии, чтобы создать новый репозиторий, чтобы заменить старый.

+2

Да, это хорошая и действительная точка. Тем не менее, Subversion позволяет очень сильно обрезать старые данные. В других VCS это немного проще (например, в git), но все VCS, которые я знаю, предполагают, что обычно вы не обрезаете. Если вы хотите регулярно истекать старые данные, VCS - это не самый подходящий инструмент. – sleske 2013-02-07 20:01:44