Permissão de arquivo com seis bytes no git. O que isso significa? [duplicado]

16

Eu executei um comando git commit e ele me deu a seguinte resposta:

7 files changed, 93 insertions(+), 15 deletions(-)
mode change 100644 => 100755 assets/internal/fonts/icomoon.svg
mode change 100644 => 100755 assets/internal/fonts/icomoon.ttf
mode change 100644 => 100755 assets/internal/fonts/icomoon.woff

Eu sei que arquivos podem ter permissões de usuário / grupo / outras permissões de rwx e elas podem ser expressas como três bytes, como "644" ou "755". Mas por que o git mostra seis bytes aqui?

Li os seguintes artigos, mas não encontrei resposta:

por That Brazilian Guy 18.06.2018 / 20:02

2 respostas

26

Os valores mostrados são os modos de arquivo de 16 bits armazenados por git , seguindo o layout dos tipos e modos POSIX :

32-bit mode, split into (high to low bits)

4-bit object type
  valid values in binary are 1000 (regular file), 1010 (symbolic link)
  and 1110 (gitlink)

3-bit unused

9-bit unix permission. Only 0755 and 0644 are valid for regular files.
Symbolic links and gitlinks have value 0 in this field.

Esse arquivo não menciona diretórios; eles são representados usando o tipo de objeto 0100.

Cada dígito no valor de seis dígitos está em octal, representando três bits; Portanto, 16 bits precisam de seis dígitos, o primeiro dos quais representa apenas um bit:

Type|---|Perm bits

1000 000 111101101
1 0   0   7  5  5

1000 000 110100100
1 0   0   6  4  4

git não armazena modos arbitrários, apenas um subconjunto dos valores é permitido, dos tipos e modos POSIX habituais (em octal, 12 para um link simbólico, 10 para um arquivo regular, 04 para um diretório) para o qual git adiciona 16 para links git. O modo é anexado, usando quatro dígitos octal. Para arquivos, você só verá 100755 ou 100644 (embora 100664 também seja tecnicamente possível); os diretórios são 040000 (as permissões são ignoradas), os links simbólicos 120000. Os IDs set-user-set-group-id e sticky não são suportados (eles seriam armazenados nos bits não usados).

Veja também esta resposta relacionada .

    
por 18.06.2018 / 20:44
5

Tradicionalmente, os sistemas de arquivos Unix usavam 16 bits para manter o tipo em 4 bits (por exemplo, arquivo regular, diretório, dispositivo especial de caractere ...) 9 bits de usuário / grupo / outras permissões, o bit pegajoso, o bit SUID e SGID bit.

Você está vendo isso em octal, então os 5dígitos mais à direita podem ter os valores de 0 a 7 (representando 3 bits para um total de 15) e o dígito da esquerda é 0 ou 1 para o último bit.

Em um sistema Linux man -s 7 inode (ou seja, inode (7) ) deve informá-lo sobre isso na seção de tipo de arquivo e modo.

    
por 18.06.2018 / 20:18