Я только начал изучать git и для этого я начал читать Git Community Book , и в этой книге говорится, что SVN и CVS хранят разницу между файлами, а git хранит снимок всех файлов.
Но я не совсем понял, что они имеют в виду под снимком. Действительно ли git делает копию всех файлов в каждом коммите, потому что это то, что я понял из их объяснения.
PS: Если у кого-то есть лучший источник для изучения git, я был бы признателен.
Ответы:
Git включает для каждого коммита полную копию всех файлов, за исключением того, что для контента, уже присутствующего в репозитории Git, моментальный снимок будет просто указывать на указанный контент, а не дублировать его.
Это также означает, что несколько файлов с одинаковым содержимым хранятся только один раз.
Таким образом, моментальный снимок - это в основном коммит, ссылающийся на содержимое структуры каталогов.
Некоторые хорошие ссылки:
Лабораторная работа 12 иллюстрирует, как получить предыдущие снимки
« Вы могли бы изобрести мерзавца (а может быть, вы уже сделали!) »
Что такое мерзавец «Снимок»?
Узнайте GitHub
Книга Progit содержит более полное описание снимка:
Ян Худек добавляет этот важный комментарий :
источник
Git логически сохраняет каждый файл под своим SHA1. Это означает, что если у вас есть два файла с одинаковым содержимым в хранилище (или если вы переименуете файл), сохраняется только одна копия.
Но это также означает, что когда вы изменяете небольшую часть файла и фиксируете, сохраняется другая копия файла. Git решает эту проблему, используя файлы пакета. Время от времени все «свободные» файлы (на самом деле, не только файлы, но и объекты, содержащие информацию о коммитах и каталогах) из репозитория собираются и сжимаются в пакетный файл. Файл пакета сжимается с использованием zlib. И подобные файлы также дельта-сжаты.
Этот же формат также используется при извлечении или нажатии (по крайней мере, с некоторыми протоколами), поэтому эти файлы не нужно повторно сжимать.
Результатом этого является то, что репозиторий git, содержащий всю несжатую рабочую копию, несжатые последние файлы и сжатые старые файлы, как правило, относительно мал, в два раза меньше, чем размер рабочей копии. А это значит, что он меньше, чем репозиторий SVN с теми же файлами, хотя SVN не хранит историю локально.
источник