No Git, um blob representa bytes de conteúdo. O nome do arquivo e seu modo aparecem na árvore que referencia o blob. Dois caminhos com bytes iguais podem apontar para o mesmo objeto.
Reproduza o identificador
Em um ambiente com Git e sha1sum, execute os comandos abaixo. O repositório temporário especifica SHA-1 para que a comparação use o mesmo algoritmo dos dois lados.
git init --object-format=sha1 exemplo-blob
cd exemplo-blob
printf 'abc' | git hash-object --stdin
printf 'blob 3\000abc' | sha1sum
O primeiro identificador deve coincidir com o hash mostrado pelo segundo comando. O prefixo contém o tipo do objeto, um espaço, o comprimento do conteúdo em bytes e um byte nulo. Acrescentar uma quebra de linha muda o conteúdo e o comprimento. Se você salvar o arquivo com codificação diferente, conte bytes, não caracteres.
O que acontece ao renomear
Mover um arquivo sem alterar seu conteúdo pode preservar o blob. A árvore registra o novo caminho e pode adquirir outro identificador. Repositórios que usam SHA-256 produzem identificadores diferentes para a mesma entrada. O princípio de endereçar o objeto a partir do conteúdo formatado permanece.
Pro Git, objetos Git · Git hash-object
Leia também: Normalização Unicode NFC e NFKC na comparação de chaves