А как насчет системы хранения git


Может быть, это глупый вопрос, но я хотел бы поднять здесь, так как он не ясен для меня: git commit file content as snapshot относительно svn commit as delta storage systems, означает ли это, что git нужно больше дискового пространства, чем svn ? лично я считаю, что это будет Дельта в разумных пределах.

2 2

2 ответа:

Логически, git хранит каждый файл (фактически, каждый объект) в репозитории сам по себе и идентифицирует их по их SHA1. Вы можете посмотреть на это сами, объекты находятся в каталогах в .git/objects, которые идентифицируются первыми двумя символами SHA1.

Но git также поддерживает хранение (и передачу) объектов в так называемом packfile. Этот файл содержит объекты, сжатые с помощью zlib. Но он также может содержать Дельта-сжатые объекты, которые ссылаются на другой объект в тот же пакфайл (это не обязательно должна быть предыдущая версия того же файла).

Объекты, сохраненные как обычные файлы, сжимаются в пакфайл при вызове git gc. Это также происходит автоматически во время некоторых операций git, которые, вероятно, производят эти "свободные объекты".

Из-за всего этого рабочий каталог git часто меньше, чем рабочий каталог SVN. Что замечательно, учитывая, что Git working dir содержит всю историю РЕПО. (SVN working dir is обычно размер файлов в нем примерно вдвое больше. Это потому, что он содержит еще одну копию каждого файла для диффинга и фиксации.)

На самом деле, учитывая тот факт, что git использует преобразование zlib для каждого объекта, получается, что git более эффективен, чем svn: например, загрузка репозитория Ruby on Rails Git, которая включает в себя полная история проекта, в настоящее время составляет около 13М, что намного меньше размера одной проверки проекта, около 9М. хранилище сервера svn (т. е. вся история) для Ruby on Rails составляет около 115М.