Здесь стоит кое-что прояснить.
Во-первых, возможно иметь Git-репозиторий большего размера, чем SVN-репозиторий ; Надеюсь, я не подразумевал, что это никогда не имело место. Однако на практике обычно бывает так, что репозиторий Git занимает меньше места на диске, чем эквивалентный репозиторий SVN.
Одна вещь, на которую вы ссылаетесь, - это единственный SVN-репозиторий Apache, который, очевидно, является массивным Однако достаточно взглянуть на git.apache.org
, и вы заметите, что у каждого проекта Apache есть свой собственный Git-репозиторий. Что действительно нужно, так это сравнение «нравится за»; другими словами, извлечение проекта (abdera) SVN против клона (abdera) Git-репозитория .
Я смог проверить git://git.apache.org/abdera.git
. На диске он занимал 28,8 МБ.
Затем я проверил версию SVN http://svn.apache.org/repos/asf/abdera/java/trunk/
, и она потребляет 34,3 МБ.
Оба числа были взяты из отдельно смонтированного раздела в пространстве ОЗУ, а указанное число было количеством байтов, взятых с диска.
Если в качестве средства тестирования используется du -sh
, проверка Git составила 11 МБ, а проверка SVN - 17 МБ.
Git-версия Apache Abdera позволит мне работать с любой версией истории вплоть до текущего выпуска; SVN будет иметь только резервную копию текущей версии. Тем не менее, он занимает меньше места на диске.
Как, спросите вы?
Ну, с одной стороны, SVN создает намного больше файлов . В кассе SVN есть 2959 файлов; соответствующий репозиторий Git содержит 845 файлов.
Во-вторых, , в то время как SVN имеет папку .svn
на каждом уровне иерархии, репозиторий Git имеет только один репозиторий .git
на верхнем уровне . Это означает (среди прочего), что переименования из одного каталога в другой имеют относительно меньшее влияние в Git, чем в SVN, что, к счастью, уже оказывает относительно небольшое влияние.
В-третьих, Git хранит свои данные в виде сжатых объектов, тогда как SVN сохраняет их в виде несжатых копий . Перейдите в любой каталог .svn/text-base
, и вы найдете несжатые копии (базовых) файлов.
Git имеет механизм для сжатия всех файлов (и даже всей истории) в файлы пакета. В случае Абдеры, .git/objects/pack/
имеет один файл .pack (содержащий всю историю) в файле 4.8Mb.
Таким образом, размер репозитория (приблизительно) равен размеру текущего извлеченного кода в этом случае, хотя я не ожидаю, что это всегда будет так.
В любом случае, вы правы, что история может вырасти до размера, превышающего общий размер текущей проверки; но из-за того, как работает SVN, он действительно должен приблизиться к удвоенному размеру, чтобы многое изменить. Даже в этом случае сокращение дискового пространства на самом деле не является главной причиной для использования DVCS; конечно, это преимущество для некоторых вещей, но это не реальная причина, по которой люди его используют.
Обратите внимание, что Git (и Hg, и другие DVCS) страдают от проблемы, когда (большие) двоичные файлы регистрируются, а затем удаляются, так как они все равно будут отображаться в хранилище и занимать место, даже если они ' не актуально. Сжатие текста позаботится о таких вещах для текстовых файлов, но двоичные являются большей проблемой. (Существуют административные команды, которые могут обновлять содержимое репозиториев Git, но они имеют несколько более высокие накладные / административные затраты, чем CVS; git filter-branch похожа на svnadmin dump/filter/load
.)
упоминаются другие тесты Git.