Для того, чтобы объяснить термин-снимок ясно.Пожалуйста, позвольте мне представить две другие вещи:
- формат Git Loose Object
- GIT Packfiles
Предположим, у нас есть файл с именем "a.txt"содержимое которого состоит из десяти букв «a» под контролем git.После того, как мы передадим этот файл, он создаст три папки по пути .git / objects, и у каждой папки будет один файл. Каждый файл имеет вид SNAPSHOT .
![a.txt file under git control which has been committed](https://i.stack.imgur.com/IiBBh.png)
![three floders created by git after committed](https://i.stack.imgur.com/bw8Rt.png)
Каждая папка имеет один файл
![enter image description here](https://i.stack.imgur.com/d70xm.png)
Теперь , мыотредактируйте файл a.txt, чтобы увидеть, что происходит
Мы изменили первую букву 'a' на букву 'b'
- >> ![enter image description here](https://i.stack.imgur.com/j30Ti.png)
Тогда зафиксировано!
Git создал три новых файла под тремя новыми флодерами
![enter image description here](https://i.stack.imgur.com/2gK0K.png)
Эти три новых файла SNAPSHOTs
![enter image description here](https://i.stack.imgur.com/vhFEq.png)
Каждый раз, когда мы выполняем COMMIT, git сохраняет снимки на диск вместо разницы между новой версией и старой версией того же файла. Даже если мы просто изменили одну букву одного файла, git сохранит весь файл как снимок .
Это также называется форматом свободного объекта .
В этом случае git будет занимать больше места на диске, чем другие vcs (например, subversion).
Но после этого время от времени блестящий git будет выполнять другую работу (git gc)который создал PACKFILES и удалил Snapchat, содержимое которого аналогично уменьшению его размера.
Пакетные файлы находятся в .git / objects / pack
Вы можете увидеть егопосле выполнения команды "git gc" самостоятельно.