Это старый вопрос, но кое-что требует уточнения:
Этот вопрос и ответы ниже говорят о хите Git файла, который не совсем совпадает с "SHA1 этого файла" как спросил в вопросе.
Короче говоря:
Если вы хотите получить Git хэш файла в индексе - см.
ответ Чарльза Бэйли :
git ls-files -s $file
Если вы хотите получить хеш Git любого файла в вашей файловой системе - см.
ответ от cnu :
git hash-object $file
Если вы хотите получить хеш Git любого файла в вашей файловой системе, и у вас не установлен Git :
(echo -ne "blob `wc -c < $file`\0"; cat $file) | sha1sum
(Выше показано, как на самом деле вычисляется хеш Git - это не сумма sha1 файла, а сумма sha1 строки "blob SIZE \ 0CONTENT" где "blob" - буквально строка «blob» (за ней следует пробел), SIZE - размер файла в байтах (десятичный ASCII), "\ 0" - ноль символ и CONTENT - фактическое содержимое файла).
Если вы хотите получить "SHA1 этого файла" , как было буквально задано в вопросе:
sha1sum < $file
Если у вас нет sha1sum
, вы можете использовать shasum -a1
или openssl dgst -sha1
(с немного другим форматом вывода).