Почему уничтожение не является важной функцией Subversion?

StackOverflow https://stackoverflow.com/questions/2426056

  •  19-09-2019
  •  | 
  •  

Вопрос

Вот уже несколько лет я жду, когда в Subversion появится функция "удалить навсегда" (obliterate).Я не решаюсь перейти на Subversion (из Visual SourceSafe : p), потому что я думаю, что это важная функция, так как в противном случае я бы ожидал, что репозиторий будет расти нестабильно.Однако по той или иной причине запуск функции откладывается снова и снова.Поэтому я начинаю задаваться вопросом, есть ли какая-то другая функция или обходной путь, который делает функцию удаления необязательной.

Что вы делаете, когда хотите уменьшить центральный репозиторий SVN?

Пример 1проверьте в большой сторонней библиотеке, и через несколько недель я понимаю, что это не подходит для моих нужд.Я не хочу, чтобы это позволяло вечно хранить и создавать резервные копии такого большого объема данных.

Пример 2:У меня есть 10 версий 10 больших сторонних библиотек в репозитории, но я использую только последние версии.

Пример 3:Я случайно проверил конфиденциальную информацию (как было предложено Джон).

Пример 4:Я случайно проверил несколько больших файлов, которые никогда не предназначались для размещения в репозитории.

Это было полезно?

Решение

Существует достаточное количество обсуждений svn obliterate в проблемном билете на сайт Apache Subversion, большая часть которого закончилась примерно в 2008 году.Кажется, существует общее мнение, что это хорошая возможность, хотя ее использование должно быть редким.

Есть две основные причины этого хотеть.

Во-первых, проверка конфиденциальной информации может стать проблемой.Оставлять его там удаленным не обязательно, это зависит от уровня конфиденциальности и уязвимости репозитория.

Во-вторых, регистрация большого количества данных, которые не следует возвращать, может резко увеличить размер репозитория.Дисковое пространство в настоящее время, как правило, дешево, но оно не безгранично, и есть и другие причины, по которым файловое пространство может иметь значение.Если необходимо отправить репозиторий через сетевое соединение, это дополнительное время, которое может быть важным, а может и не быть важным.Возможность записи CD-ROM или DVD-ROM, содержащего весь репозиторий, может иметь реальные преимущества.

Таким образом, это полезная возможность, которая в настоящее время реализуется путем создания дампа, фильтрации и перезагрузки репозитория.Согласно отчетам, которые я видел, это подвержено ошибкам, может быть медленным и требует закрытия репозитория.

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

Другие советы

Это нарушает смысл контроля версий.
Контроль версий — это возможность восстановить предыдущее состояние.Если вы удалите файл навсегда, вы не сможете этого сделать.

OTOH, я не знаю VSS, поэтому, возможно, я неправильно понял «удалить навсегда»

Очевидная причина против этого заключается в том, что разработчики думают, что это в конечном итоге ухудшит SVN - счастье, которое вы испытываете от возможности удалить ненужные вещи, будет значительно затмеваться вашим гневом, когда вы случайно что-то уничтожаете и ваш /trunk пропадает.

FogBugz ведет себя точно так же, и в их случае, я считаю, это сделано специально, чтобы защитить пользователей от самих себя.

Obliterate нарушает принципы контроля версий, которые вы хотели бы иметь.Либо вы не сохраните место, либо предыдущие теги потеряются.Вы не сможете вернуться к предыдущей версии, если удалите какие-либо файлы.

Что касается вашего комментария о росте репозитория...Любой репозиторий будет расти линейно с размером изменений с течением времени.В этом весь смысл системы контроля версий.Если вам не нужно отслеживать предыдущие версии, то почему бы просто не использовать где-нибудь общую папку?

Цитирование Subversion Obliterate, забытая функция, в этом вопросе есть три компонента: проблема, причина и решение.Раз уж вы начали с вопроса к решению, то начну с этого.

Решение

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

Произошло небольшое усилие (следите за веткой) в команде svn, чтобы добавить туда функцию уничтожения после 2008 года, но эта попытка умерла тихой смертью.

Проблема

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

Увы, сейчас, кажется, слишком поздно для этого;настоящая причина, по которой он так и не был добавлен позже, заключалась в том, что теперь его практически невозможно реализовать, поскольку он подключается к коду на самом фундаментальном уровне (см. также небольшое усилие ссылку в разделе «Решение»).

Из Запись часто задаваемых вопросов:

Ревизии — это неизменяемые деревья, которые дополняют друг друга.Удаление ревизии из истории вызовет эффект домино, создав хаос во всех последующих редакциях и, возможно, сделав недействительными все рабочие копии.

Причина

Проблема в том, что изначально функция уничтожения была отклонена, поскольку она не соответствовала принципу истинного контроля версий.

Опять же из Запись часто задаваемых вопросов:

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

Однако

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

Потому что удаление данных из репозитория нарушает основную предпосылку контроля версий, заключающуюся в том, что можно воспроизвести все предыдущие состояния и изменения в дереве исходного кода.Если вы хотите стереть что-то из системы контроля версий, вы, вероятно, «делаете это неправильно», как говорится.

Я использую различные системы контроля версий уже около 15 лет и никогда не нуждался в такой функции.

Интересно, по каким причинам вам нужна эта функция:

  • место на диске?Трудно поверить, учитывая цену дискового пространства
  • передал пароль для контроля версий?Что ж, это вас научит.Иди и смени пароль
  • скорость репозитория?Звучит не так, но если бы я рассматривал совершенно другую систему с якобы более высокой производительностью.

Размер репозитория SVN можно уменьшить, выполнив дамп и загрузку.По сути, если вы говорите, что никогда не хотите возвращаться к чему-то старше пары лет, можно создать дамп репозитория, отфильтровать его по времени, а затем перезагрузить дамп.Желание избавиться от одного файла из-за его размера, вероятно, указывает на то, что этот файл изначально не принадлежал системе контроля версий.

Существует несколько сценариев, которые помогут вам стереть данные.Следовать эта ветка списка рассылки для получения дополнительной информации.

Это сложный способ сделать это, поскольку суть контроля версий заключается не в потере данных, а в их безвозвратном удалении.Но если вы подрезаете раз в год или что-то в этом роде, это может быть сделано.

Весь смысл управления версиями заключается в том, чтобы иметь полную историю того, как выглядит ваш репозиторий.Тот Самый obliterate команда нарушает эту цель системы управления версиями, и это ошибка во всех системах контроля версий, в которых она есть.

SVN имеет дешевое копирование и дешевое ветвление, которое не требует полной копии файла - только измененные биты.Его центральный репозиторий обычно очень удобен в управлении по размеру, что делает это несоответствие ненужным.

Уничтожение не является важной функцией Subversion, поскольку оно фактически нарушает основные принципы контроля версий (а именно:для записи всей истории).

И это не является важной функцией, поскольку в любом случае есть обходной путь (с использованием svnadmin и фильтрации).

Кроме того, над этой функцией в настоящее время ведется активная работа.Видеть эта почта для получения подробной информации.

Последний раз, когда я проверял, это было задумано как функция ADMIN, и администратор в любом случае уже может сбрасывать/фильтровать/broken_workaround и удалять историю.Что касается контрольного журнала, это не меняет текущую цитату.Это сделало бы ситуацию менее ужасной, если бы что-то абсолютно необходимо было удалить.

Уничтожение Svnadmin — одна из наиболее востребованных функций, разработчик наконец признал, что она должна существовать (наконец-то!спустя 8 лет!!!).А отсутствие огласки отталкивает пользователей от SVN.

К сожалению, мне пришлось узнать об этой «недостающей функции» на собственном горьком опыте.С каких пор базовая функциональность стала функцией?Новые пользователи начинают слышать об этом и избегать SVN.Что касается меня, то я сейчас использую Git.

Не нравится мое мнение?Линус назвал разработчиков SVN идиотами, а всю централизованную систему несовершенной.Я доверяю Линусу как настоящему эксперту, и конкретно Он знает об источнике.

Что я делаю - не использую Subversion.Извини.

Они (разработчики) явно не согласны с вашей оценкой того, что это критическая функция.Это не помешало компании, в которой я сейчас работаю, использовать его ;) Лично я исключаю подрывную деятельность именно по этой причине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top