В течение нескольких лет теперь, я ожидаю Подверсии к функции, "удаляют постоянно" (стирают) функцию. Я смущаюсь делать переход к Подверсии (прибывающий из Visual SourceSafe :p), потому что я думаю, что это - существенная особенность, поскольку иначе я ожидал бы, что репозиторий вырастет без остановки. Однако по одной причине или другому, функция отложена много раз. Таким образом, я начинаю задаваться вопросом, существует ли некоторая другая функция или обходное решение, которое делает стереть функцию необязательной.
Что Вы делаете, когда Вы хотите уменьшить центральный репозиторий SVN?
Пример 1: Я регистрируюсь в крупной сторонней библиотеке, и после нескольких недель я понимаю, что она не подходит для моих потребностей. Я не хочу, чтобы это сохранило и скопировало тот большой объем данных навсегда.
Пример 2: у Меня есть 10 версий 10 крупных сторонних библиотек в репозитории, но я только использую последние версии.
Пример 3: Я случайно зарегистрировался в уязвимой информации (как предложил John).
Пример 4: Я случайно зарегистрировался в некоторых больших файлах, которые никогда не предназначались, чтобы быть помещенными в репозиторий.
В заявке о проблеме на сайте Apache Subversion довольно много говорится о svn Obliterate
, большая часть этого заканчивается примерно в 2008 году. Похоже, все согласны с тем, что это хорошая возможность, хотя ее использование должно быть редкостью.
Есть две основные причины этого желания.
Во-первых, проверка конфиденциальной информации может быть проблемой. Оставить его там, удалить, не обязательно, в зависимости от уровня конфиденциальности и уязвимости репозитория.
Во-вторых, регистрация большого количества вещей, которые не следует возвращать, может значительно увеличить размер репозитория. В настоящее время дисковое пространство, как правило, дешево, но оно не неограниченно, и есть другие способы, которыми файловое пространство может иметь значение. Если необходимо отправить репозиторий через сетевое соединение, это дополнительное время, которое может быть или не иметь значения. Возможность записи CD-ROM или DVD-ROM, содержащих весь репозиторий, может иметь реальные преимущества.
Следовательно, это полезная возможность, которая в настоящее время реализуется путем сброса, фильтрации и перезагрузки репозитория. Согласно отчетам, которые я видел, это подвержено ошибкам, может быть медленным и требует закрытия репозитория.
Очевидно, что это не самая приоритетная функция для команды Subversion, учитывая, что в течение нескольких лет ей требовалось, чтобы кто-то проделал работу по разработке дизайна и его реализации. В конце концов, это нужно делать очень редко, и есть обходной путь. Однако любой, кто хочет проделать большую работу над Subversion, может предоставить патч, который (при достаточно хорошем качестве), вероятно, будет реализован.
Я использую различные системы контроля версий уже около 15 лет, и мне никогда не требовалась такая функция.
Интересно, по каким причинам вам нужна эта функция:
Это нарушает смысл управления версиями.
Контроль версий - это возможность восстановить предыдущее состояние. Если вы удалите файл навсегда, вы не сможете это сделать.
OTOH Я не знаю VSS, поэтому, возможно, неправильно понял "удалить навсегда"
Что я делаю - не использую подрывную деятельность. Сожалею.
Они (разработчики) явно не согласны с вашей оценкой того, что это важная функция. Не остановил компанию, в которой я работаю в данный момент, чтобы использовать его;) Я лично исключаю подрывную деятельность именно по этой причине.
Можно уменьшить размер репозитория SVN, выполнив дамп и загрузку. По сути, если вы говорите, что никогда не хотите возвращаться к чему-то старше пары лет, можно выгрузить репозиторий, отфильтровать по времени, а затем перезагрузить дамп. Желание избавиться от одного файла из-за его размера, вероятно, свидетельствует о том, что этот файл изначально не принадлежал системе управления версиями.
Поскольку удаление данных из репозитория нарушает основную предпосылку управления версиями, то есть возможность воспроизвести все предыдущие состояния и изменения исходного дерева. Если вы хотите что-то стереть из системы контроля версий, вы, вероятно, «делаете это неправильно», как говорится.
Вся суть системы управления версиями состоит в том, чтобы иметь полную историю того, как выглядит ваш репозиторий. Команда Obliterate
побеждает эту цель контроля версий, и это недостаток во всех системах контроля версий, в которых она есть.
SVN имеет дешевое копирование и дешевое ветвление, которое не требует полной копии файла - только измененные биты. Его центральный репозиторий обычно очень управляем по размеру, что делает эту ошибку ненужной.
Уничтожение не является существенной особенностью Subversion, потому что оно фактически нарушает основные принципы управления версиями (а именно: запись всей истории).
И это не важная функция, потому что в любом случае есть обходной путь (с использованием svnadmin и фильтрации).
Кроме того, эта функция в настоящее время активно работает. См. этот пост для подробностей.
Есть несколько сценариев, которые помогут вам стереть данные. Подпишитесь на эту ветку списка рассылки для получения дополнительной информации.
Это трудный способ сделать это, поскольку суть контроля версий не в потере данных, а в их удалении навсегда. Но если вы подрезаете один раз в год или что-то в этом роде, это можно сделать.
Уничтожение нарушает принципы контроля версий, которые вы хотели бы иметь. Либо вы не сэкономите место, либо предыдущие теги будут повреждены. Вы не сможете вернуться к настоящей предыдущей версии, если удалите какие-либо файлы.
Что касается вашего комментария о росте репозитория ... Любой репозиторий будет расти линейно с размером изменений с течением времени. В этом весь смысл системы контроля версий. Если вам не нужно отслеживать предыдущие версии, почему бы просто не сохранить где-нибудь общую папку?
Очевидная причина против этого состоит в том, что разработчики думают, что это в конечном итоге ухудшит SVN - счастье, которое вы испытываете от возможности обрезать ненужные вещи, будет значительно меньше вашего гнев, когда вы случайно что-то стираете, и ваш / trunk пропадает.
FogBugz ведет себя точно так же, и в их случае, я полагаю, это полностью сделано намеренно, защищая пользователей от самих себя.