¿Por qué el file de índice git es binary?

La mayoría de los files en mi directory de Git son files de text plano (excepto por los objects sueltos comprimidos y los files de package). De modo que puedo grabar y editar files como .git/HEAD o .git/refs/heads/master e inspeccionar el repository si se corrompe.

Pero el .git/index es un file binary. ¿No sería más útil un file de text sin formatting porque se puede modificar fácilmente a mano?

Scott Chacon muestra en su presentación la siguiente image (Diapositiva 278): Índice por Scott Chacon

En mi opinión, esto se puede poner fácilmente en un file de text sin formatting.

Entonces, ¿por qué es un file binary en lugar de un file de text plano?

El índice, tal como se presenta en " ¿Qué contiene el índice git EXACTAMENTE? " Contiene metadatos y, como se señala a continuación por Jazimov , references :

  • inputs de índice : references a inputs, con metadatos (time, modo, tamaño, SHA1, …)
  • treees en caching , que hacen reference a treees ("hashes pre calculados para treees que pueden derivarse del índice"), lo que ayuda a acelerar la generación de objects en tree a partir del índice para un nuevo compromiso.

La concatenación de esos datos lo convierte en un file binary, aunque la razón real es pura especulación. No poder modificarlo a mano podría por uno.

Ninguna de las razones dadas por la respuesta aborda adecuadamente la pregunta planteada, que es "¿Por qué el file índice de Git es binary?". La respuesta aceptada simplemente no es correcta. El índice no "contiene" ningún file de text sin formatting, ya que contiene references a files de text sin formatting. Además, decir que el índice de Git contiene "inputs de índice" dice que realmente no es nada útil, especialmente para un compañero desarrollador que busca la Verdad … Finalmente, los treees no son almacenados en caching por el índice, las references a los treees están en la memory caching.

El índice no es binary porque está "indexado" (como concluyó el póster en un comentario anterior), y no es binary por "razones de performance" per se. Todo en el índice podría expressse utilizando un file de text puro, incluso los indicadores y bits expresados ​​en el file de índice binary podrían expressse como ASCII. Es binary porque los formattings de files binarys que contienen indicadores de bits pueden usar el espacio en disco de manera más eficiente. Y, conociendo a Linus, probablemente sea binary para disuadir la manipulación por parte de los novatos con fácil acceso a los editores de text.

* Nueva información * La versión 4 del índice implementa la compression de ruta, ahorrando hasta aproximadamente el 50% del tamaño del índice para grandes repositorys. (Fuente: https://git-scm.com/docs/git-update-index ) Esta compression se prestaría a un file de índice de formatting binary.