Как GIT решает, что входит в BLOB? - PullRequest
1 голос
/ 23 апреля 2009

Я пытаюсь понять, как Git работает лучше.

Принимая во внимание некоторые произвольные файлы и произвольное количество коммитов, как git решает, как разбить эти файлы на большие двоичные объекты, которые затем однозначно идентифицируются хешами SHA-1?

Я только что сделал около 10 коммитов perl / C / java-кода и текста в новом git-репо и как-то git разделил файлы на маленькие сегменты, как он решил, как эти сегменты должны быть разделены?

Ответы [ 3 ]

7 голосов
/ 23 апреля 2009

Git создает большой двоичный объект для содержимого каждого файла, если только этот же контент не существует (в этом случае он повторно использует большой двоичный объект). Но это еще не все - git также создает объекты для каждого каталога, коммита и подписанного тега. Каждый объект хранится в .git / objects, до тех пор, пока репозиторий не будет перепакован (автоматически или с помощью git gc), и в этом случае некоторые объекты будут собраны и разделены в файл пакета (в .git / objects / pack) .

Он не разделяет содержимое одного файла между несколькими каплями или небольшими сегментами, как вам кажется.

3 голосов
/ 23 апреля 2009

Я предлагаю вам ознакомиться с некоторыми из базовых (то есть "низкого уровня") ссылок. Ваш конкретный вопрос см. В разделе Объектная модель Git в Git Community Book.

После этого вам может быть интересно прочитать Git from the Bottom Up (PDF) или превосходные Git Internals (PDF, 9 долларов США) для понимания низкого уровня недоработки в Git («файловая система с адресным содержимым» и направленные ациклические отношения графов).

1 голос
/ 23 апреля 2009

Все файлы попадают в большой двоичный объект, но это не обязательно означает, что Git будет хранить файл для одного большого двоичного объекта (Git имеет высокоэффективный упакованный формат, который объединяет данные). Если вас интересует внутренняя информация о формате упаковки Git, вам лучше спросить их список или прочитать их архитектурную документацию.

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