Я работаю с репозиторием SVN, которому более чем 3 года, содержит более чем 6 100 фиксаций и составляет более чем 1,5 ГБ в размере. Я хочу уменьшить размер репозитория SVN (я не говорю о размере полного экспорта SVN - я имею в виду весь репозиторий, поскольку он существовал бы на сервере) прежде, чем переместить его в новый сервер.
Текущий репозиторий содержит исходный код для всех наших проектов программного обеспечения, но он также содержит относительно большие двоичные файлы никакого значения, такие как:
Многими этими большими файлами была 'SVN, удаленная', так как они были добавлены, создав дальнейшую проблему identifing крупнейшие преступники.
Я хочу также:
Действительно ли любой из них возможен?
Может быть, может и нет.
Правильный ответ:
p.communicate(b"insert into egg values ('egg');");
Обратите внимание на ведущий b, говоря, что это последовательность байтов, а не последовательность символов Юникод. Кроме того, если вы читаете это из файла:
value = open('thefile', 'rt').read()
p.communicate(value);
Измените это на:
value = open('thefile', 'rb').read()
p.communicate(value);
Снова обратите внимание на 'b'.
Теперь, если значение
является последовательностью, получаемым от API, который возвращает только последовательности независимо от того, что, , то необходимо его кодировать.
p.communicate(value.encode('latin-1');
Latin-1, поскольку в отличие от ASCII поддерживает все 256 байт. Но при этом наличие двоичных данных в Юникоде требует неприятностей. Лучше сделать его двоичным с самого начала.
-121--3126664-Необходимо использовать svnadmin dump для получения файла дампа текущего репозитория и, возможно, svndumpfilter для обработки файла дампа. Вы также можете вручную изменить файл дампа до тех пор, пока вы осторожны.
Это, вероятно, не будет быстрой и легкой работой, но это может быть сделано. Я сделал нечто подобное, только для гораздо меньшего хранилища. У меня было репо с примерно 150 редакциями, которые заняли около 600MB.
Создайте дамп из текущего репозитория, внесите необходимые изменения и попробуйте загрузить измененный дамп в новый репозиторий. Затем проверьте новый репозиторий, чтобы убедиться, что все еще имеет смысл (история все еще правильный, никаких странных изменений в путях,...).
Другие правильно в Svnadmin Dump
и т. Д. Что-то в этом роде приведет вас к пересмотру, которые добавили множество данных в ваш репо, и являются кандидатами для Svndumpfilter
:
for r in `svn log -q | grep ^r | cut -d ' ' -f 1 | tr -d r`; do
echo "revision $r is " `svn diff -c $r | wc -c` " bytes";
done
Вы также можете попробовать что-то подобное, чтобы найти изменения, которые добавили файлы с определенным расширением (здесь, .jpg):
svn log -vq | egrep "^r|\.jpg$" | grep -B 1 "\.jpg$"
Если вы удалили файлы из репозитория, используя «SVN Delete», вы на самом деле не удалили файлы. Это будет красота SVN. Как только файл добавлен в репозиторий, он там навсегда (если только сдач и нагрузка). После «удаления» файлов вы фактически создаете новый пересмотр, который отмечает удаление, но файлы продолжают существовать в предыдущих изменениях.
Я сделал некоторую свалку и нагрузку, но и намного большего репозитория. Около 60 000 (!!!) ревизии. Потребовалось время, но в конце, после тщательной загрузки, репозиторий снова построен.
Ваш единственный способ - это список изменений, которые были добавлены файлы, изменены и удалены. Затем сбросьте изменения между собой и загрузите их в правильном порядке. Будьте в курсе, нет места для ошибок. Если вы допустили ошибку, вам придется начать все сначала. Дамп и загрузить с самого начала.
Мое предложение, если большие файлы такие проблемы, рассмотрите возможность создания нового свежего хранилища без истории. Держите старый для сравнения истории и начните работать со свежими.
Удачи.
Разве это не другая проблема, с дополнительным шагом? Т.е. вам нужно найти файлы, которые вы считаете большими и двоичными, а затем проверить, действительно ли они управляются SVN или были собраны локально (или импортированы из параллельной системы активов, если она уже есть).
Итак, просто найдите файлы, затем сделайте svn info
над ними, чтобы выяснить, являются ли они частью репозитория.
Просто маленькая мысль, вы говорите, что текущее состояние репозитория (нынешняя голова) хорош, то есть крупные двоичные файлы были SVN Deleteed в прошлом. Поэтому ваша проблема является чисто размер хранилища?
Я знаю, что вы сказали, что вы хотели бы сохранить всю историю совершения, но, как вариант, вы могли бы сделать два свалка, по одному для всей истории ревизии, и один для текущая редакция головы.
Если вы поставите полный дамп на DVD, например, у вас будут доступны данные, если вы когда-нибудь нуждаетесь в этом, но вы можете удалить весь репозиторий и SVN загрузить дамп пересмотра, оставив вас с небольшим чистым репозитором.
Также можно сбросить специфическую ревизию, а не только голову, так, например, вы могли бы сохранить последние 3 месяца ревизий и сбросить все старше на DVD ....