$ 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
...
Eu sei que os últimos 3 dígitos de outubro são o modo de arquivo, mas para que servem os 3 primeiros dígitos? Não consigo encontrar no manual do usuário do git.
chmod 0100755 <file>
para deixar o Git feliz. Ou ainda mais engraçado, git chmod <perm> <file> `por causa dos modos de arquivo do Git (ele não existe) ... Veja também questões como Como faço para remover arquivos que dizem“ modo antigo 100755 novo modo 100644 ”de mudanças não planejadas em Git? , Como recuperar as permissões do arquivo para o que o git “pensa” que o arquivo deveria ser? . Esta ferramenta é uma piada quebrada ...Respostas:
Os 6 dígitos mostram o modo de arquivo usando as notações clássicas do UNIX. Os dois primeiros dígitos mostram o tipo de arquivo, o terceiro é sobre bits set-uid / set-gid / sticky e você conhece os três últimos.
Aqui está como
man 2 stat
documenta isso em meu sistema GNU / Linux:fonte
0
nas linhas superiores (por exemplo, em0170000
vez de170000
), já que é0
para todas as linhas, por que não simplesmente omiti-la?0
é uma convenção clássica para indicar números octais.Do
index-format.txt
arquivo Git , em relação ao modo:Além disso, um tipo de objeto de diretório (binário 0100) e um arquivo regular gravável em grupo (0664 permissões) são permitidos conforme indicado pelo método. O arquivo regular não executável gravável em grupo é um modo não padrão que era compatível com as versões anteriores do Git.
fsck.c
fsck_tree
Isso torna os modos válidos (como binário e octal):
0100000000000000
(040000
): Diretório1000000110100100
(100644
): Arquivo regular não executável1000000110110100
(100664
): Arquivo regular não executável gravável em grupo1000000111101101
(100755
): Arquivo executável normal1010000000000000
(120000
): Link simbólico1110000000000000
(160000
): Gitlinkfonte
644
enviar alguns arquivos no git e a mensagem de confirmação disse que eles foram criados no repo como664
040000
) para representar diretórios. Por favor, veja ofsck.c
código vinculado , ou apenas executegit ls-tree HEAD
em um repositório Git que contém diretórios.fsck
código não afirma que uma entrada de árvore com esse modo é ruim . A ideia era deixar espaço para permissões de grupo em arquivos, caso fosse necessário. Nunca foi necessário, portanto, nunca foi adicionado, mas o código de teste nunca foi alterado para proibi-lo.