Как лучше всего очистить хранилище Subversion? - PullRequest
9 голосов
/ 25 марта 2009

У меня есть растущее хранилище, содержащее десяток или около того проектов, которые я поддерживаю, используя TortoiseSVN (так как я совершенно новичок в этом и еще не знаю все входы и выходы). Пространство, которое я должен держать в репозитории, ограничено, поэтому я хочу создать его резервную копию, а затем удалить некоторые из более старых версий. Например, если проект имеет версию 50, я хочу оставить только 50,49,48.

Ответы [ 3 ]

12 голосов
/ 25 марта 2009

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

svnadmin dump /path/to/current/repo -r48:50 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump

Или используйте svndumpfilter , чтобы включить / исключить нужные биты и т. Д. В часто задаваемых вопросах по svn также содержится некоторая информация о удалении , которая может оказаться полезной.

4 голосов
/ 04 декабря 2010

Можно ли удалить старые ревизии или репозитории, чтобы освободить место для хранения?

Короткий ответ - нет. Subversion и CVS работают так, что они хранят всю историю изменений, включая удаленные файлы, двоичные файлы и т. Д. Каждая ревизия зависит от последней ревизии, поэтому вы не можете просто отрубить ревизию где-то посередине или вы испортить ваш репозиторий. Есть две вещи, которые вы можете сделать, если вам не хватает места: 1) Удалите свой модуль и заново создайте его, используя только ревизию HEAD, которая удалит все старые ревизии (но вы потеряете свою историю коммитов). 2) Лучший вариант - перейти на более высокий план :-). С Git это не проблема, так как он требует гораздо меньше памяти на сервере.

Как полностью удалить файл из истории хранилища?

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

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

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

цитата из:

http://subversion.apache.org/faq.html#removal

http://codesion.com/benefits/faq.htm#deleterevisions

1 голос
/ 25 марта 2009

Невозможно «обрезать» репозиторий в определенной ревизии так, как вы описали. Что вы можете сделать, это svn export весь репозиторий в нужной ревизии, а затем импортировать его в новую репозиторий, а затем воспроизвести коммиты из ревизий после этого из вашего файла журнала в новый репозиторий. Это не тривиально.

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

Обратите внимание, что то, что вы описываете, более или менее противоречит Subversion: оно должно сохранять все. Если у вас часто возникают проблемы с этим, подумайте о создании лучших методов регистрации. Или рассмотрите возможность использования Git , что делает этот вид экспериментов практически бесплатным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...