$ git ls-tree fb3a8bdd0ce
100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c .gitignore
100644 blob 5529b198e8d14decbe4ad99db3f7fb632de0439d .mailmap
100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 COPYING
040000 tree 2fb783e477100ce076f6bf57e4a6f026013dc745 Documentation
100755 blob 3c0032cec592a765692234f1cba47dfdcc3a9200 GIT-VERSION-GEN
100644 blob 289b046a443c0647624607d471289b2c7dcd470b INSTALL
100644 blob 4eb463797adc693dc168b926b6932ff53f17d0b1 Makefile
100644 blob 548142c327a6790ff8821d67c2ee1eff7a656b52 README
...
Sé que los últimos 3 dígitos de octubre son el modo de archivo, pero ¿para qué sirven los primeros 3 dígitos? No puedo encontrarlo en el manual del usuario de git.
chmod 0100755 <file>
para hacer feliz a Git. O incluso más divertido, git chmod <perm> <file> `debido a los modos de archivo de Git (no existe) ... También vea preguntas como ¿Cómo elimino archivos que dicen" modo antiguo 100755 modo nuevo 100644 "de los cambios sin etapas en Git? , ¿Cómo recuperar los permisos del archivo a lo que git "cree" que debería ser el archivo? . Esta herramienta es una broma tan rota ...Respuestas:
Los 6 dígitos muestran el modo de archivo usando las notaciones clásicas de UNIX. Los primeros dos dígitos muestran el tipo de archivo, el tercero es sobre set-uid / set-gid / sticky bits, y ya conoce los tres últimos.
Así es como lo
man 2 stat
documenta en mi sistema GNU / Linux:fuente
0
en las líneas superiores (por ejemplo, en0170000
lugar de170000
), ya que es0
para todas las líneas, por qué no simplemente omitirlo?0
es una convención clásica para indicar números octales.Desde el
index-format.txt
archivo Git , con respecto al modo:Además, se permite un tipo de objeto de directorio (binario 0100) y un archivo normal de escritura en grupo (permisos 0664) según lo indicado por el método. El archivo de escritura en grupo no ejecutable normal es un modo no estándar que se admitía en versiones anteriores de Git.
fsck.c
fsck_tree
Esto hace que los modos sean válidos (como binario y octal):
0100000000000000
(040000
): Directorio1000000110100100
(100644
): Archivo normal no ejecutable1000000110110100
(100664
): Archivo de escritura en grupo no ejecutable normal1000000111101101
(100755
): Archivo ejecutable normal1010000000000000
(120000
): Enlace simbólico1110000000000000
(160000
): Gitlinkfuente
644
enviar algunos archivos en git y el mensaje de confirmación decía que fueron creados en el repositorio como664
040000
) para representar directorios. Consulte elfsck.c
código vinculado o simplemente ejecútelogit ls-tree HEAD
en un repositorio de Git que contenga directorios.fsck
código no afirma que una entrada de árbol con ese modo sea mala . La idea era dejar espacio para permisos grupales sobre archivos, si resultaba necesario. Nunca fue necesario, por lo tanto, nunca se agregó, pero el código de prueba nunca se cambió para prohibirlo.