Вычислить файл Github API SHA - PullRequest
1 голос
/ 14 апреля 2019

У меня есть файл, содержимое которого "из теста" - 9 байт. В документации сказано, что SHA созданных файлов вычисляется с использованием SHA1:

Хэш файла SHA-1 вычисляется и сохраняется в объекте BLOB-объекта.

(из https://developer.github.com/v3/git/blobs/)

Однако, когда я вычисляю вывод SHA1 в шестнадцатеричном формате "из теста", я получаю 5669556d9a5c27fdd649dcaaa0873757c2aa402f.

Github API говорит, что SHA - это 62b551731eada762035d4665978027cd44291290 - это возвращенный ETag и значение "sha" в ответе API для получения файла. Кроме того, когда я вызываю конечную точку CreateFile со значением «from test» в качестве значения и 566955... в качестве ша, мне говорят, что SHA неверен.

Я также пытался добавлять новые строки, вычислять SHA значения содержимого в кодировке base64, вычислять SHA base64 + завершающий перевод строки, и ни один из них не дал мне 62b551731eada762035d4665978027cd44291290. Как Github вычисляет это значение?

Я дважды проверил содержимое удаленного файла одинаково - «из теста» - каким-то образом SHA все еще отличается.

1 Ответ

0 голосов
/ 14 апреля 2019

А-а - GitHub вычисляет сумму blob <length>\x00<contents>, где длина - это длина в байтах строки содержимого, а \x00 - это один нулевой байт.

sha1("blob 9\x00from test") дает правильную сумму!

Подробнее см. https://stackoverflow.com/a/7225329/329700.

...