Репликация `git hash-object` с не-ascii символами - PullRequest
0 голосов
/ 28 июня 2018

При попытке воспроизвести хеш-объект я обнаружил, что он не работает при использовании символов, отличных от ascii.

$ printf hola | git hash-object -w --stdin
b8b4a4e2a5db3ebed5f5e02beb3e2d27bca9fc9a
$ printf "blob 4\0hola" | shasum
b8b4a4e2a5db3ebed5f5e02beb3e2d27bca9fc9a

Но если я добавлю символ фунта

$ printf hola£ | git hash-object -w --stdin
8f9852933655612593d0bbd43c9f7c6f25d947a0
$ printf "blob 5\0hola£" | shasum
54386ef126fcfc9e8242c6d6bade401b1f27999a

Есть идеи, почему это происходит?

Похожие: Как назначить Git SHA1 для файла без Git?

1 Ответ

0 голосов
/ 28 июня 2018

Число определяет количество байтов, а не символов

£ в UTF-8 имеет ширину 2 байта (0xc2 0xa3), таким образом:

printf "blob 6\0hola£" | shasum это то, что вы хотите

, который возвращает 8f9852933655612593d0bbd43c9f7c6f25d947a0 как ожидалось.

Проверьте себя:

Распаковать содержимое только что написанного объекта:

printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - .git/objects/8f/9852933655612593d0bbd43c9f7c6f25d947a0 | gzip -dc | xxd

(или используйте pigz: Инструмент командной строки Deflate )

...