2014-12-02 4 views
3

Большинство файлов в моей директории Git представляют собой текстовые файлы (за исключением сжатых свободных объектов и пакетов). Поэтому я могу просто катать и редактировать файлы, такие как .git/HEAD или .git/refs/heads/master, и проверять репозиторий, если он поврежден.Почему файл индекса git двоичный?

Но .git/index - это двоичный файл. Не будет ли полезен простой текстовый файл, потому что его можно легко изменить вручную?

Скотт Чакона показывает в своей presentation следующее изображение (слайд 278): Index by Scott Chacon

На мой взгляд, это может быть легко поместить в текстовый файл.

Так почему же это двоичный файл, а не текстовый файл?

+1

Ответы на http://stackoverflow.com/q/4084921/6309 могут помочь. – VonC

+0

@VonC Я могу просто увидеть объяснение структуры двоичного файла. Я что-то упускаю? –

+0

«Так почему же это двоичный файл, а не простой текстовый файл?»: Ответы показывают, как структура индекса является двоичным. – VonC

ответ

3

Индекс, представленный в "What does the git index contain EXACTLY?" содержит метаданные и, как noted below по Jazimov, ссылки:

  • index entries: ссылки на записи, с метаданными (время, режим, размер, SHA1,. ..)
  • cached trees, который ссылается на деревья («предварительно вычисленные хеши для деревьев, которые могут быть получены из индекса»), что помогает ускорить создание древесных объектов из индекса для нового фиксации.

Конкатенация этих данных делает его двоичным файлом, хотя фактическая причина - чистая спекуляция. Not возможность изменить его вручную может одним.

3

Ни одна из причин, приведенных в ответе, адекватно не затрагивает поставленный вопрос, а именно: «Почему файл индекса Git двоичный?». Принятый ответ просто неверен. Индекс не «содержит» любые текстовые файлы - он содержит ссылок в текстовые файлы. Кроме того, чтобы сказать, что индекс Git содержит «записи индекса», на самом деле ничего полезного нет, особенно для другого разработчика, ищущего Истину ... Наконец, деревья не кэшируются индексом - ссылки к деревьям кэшируются.

Индекс не является двоичным, потому что он «проиндексирован» (поскольку плакат заключен в комментарии выше) - и он не является двоичным по «причинам производительности», как таковой. Все в индексе может быть, выраженное с использованием чистого текстового файла - даже флаги и биты, выраженные в двоичном индексном файле, могут быть выражены как ASCII. Он двоичный, поскольку двоичные форматы файлов, содержащие битовые флаги, способны более эффективно использовать дисковое пространство. И, зная Линуса, он, вероятно, является двоичным, чтобы отговорить новичков от несанкционированного доступа к текстовым редакторам.

* Новая информация * Version 4 индекса реализует сжатие пути, экономя до примерно 50% от размера индекса для крупных сделок РЕПО. (Источник: https://git-scm.com/docs/git-update-index) Это сжатие предоставило бы индексный файл двоичного формата.

+1

Интересно. +1. Я попытался изменить свой ответ, чтобы сделать его немного менее неправильным или бессмысленным. – VonC

Смежные вопросы