Git снимок и копия файла - PullRequest
0 голосов
/ 13 ноября 2018

в документации git написано, что для каждого коммита снимка делается.Подчеркивается, что git хранит файлы не в виде серии различий, а в виде серии снимков.Также подчеркивается, что снимок содержит копию файла (если файл был изменен, конечно).Итак, давайте погрузимся в него:

git init 
git add file.bin  # (file.bin has 1024 MB)
git commit -m "."
ls -l --block-size=M  -a
    drwxr-xr-x 1 john 197121    0M lis 13 08:27 .git/
    -rw-r--r-- 1 john 197121 1024M lis 13 08:19 file.bin

echo "X" >> file.bin # file was changed
git commit -am "Changed file.bin"
    ls -l --block-size=M  -a
    drwxr-xr-x 1 john 197121    0M lis 13 08:27 .git/
    -rw-r--r-- 1 john 197121 1025M lis 13 08:19 file.bin

Итак, размер .git 'по-прежнему <1 МБ.Это показывает, что <code>file.bin не было скопировано.Почему?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

При использовании команды ls -l размер папки, которую вы видите, - это не размер всех ее компонентов, а размер самой папки (а в linux папка представляет собой простой маленький файл).

Чтобы достичь того, что вы хотите сделать, вы должны использовать команду du -sh.

du -sh *       # print size of all non-hidden files in directory
du -sh .[^.]*  # print size of all hidden files in directory
0 голосов
/ 13 ноября 2018

Размер .git не увеличивается линейно вместе с размером вашей кодовой базы.Если это так, то потребуется огромное количество места для хранения.Это объяснение взято из статьи .Пожалуйста, прочитайте это для более подробного объяснения.

На самом деле, когда вы фиксируете git, для создания моментального снимка вашего рабочего каталога выполняется только две вещи:

  1. Списокitem
  2. Если файл не изменился, git просто добавляет имя сжатого файла (хэш) в снимок.
  3. Если файл изменился, git сжимает его, сохраняетсжатый файл в папке объекта.Наконец, он добавляет имя (хеш) этого сжатого файла в моментальный снимок.

Это упрощение, весь этот процесс немного сложен и будет частью будущей публикации.

И как только этот моментальный снимок будет создан, он также будет сжат и получит имя с помощью хэша, и где все эти сжатые объекты заканчиваются?В папке объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...