Git - поиск SHA1 отдельного файла в индексе - PullRequest
37 голосов
/ 20 января 2009

Я добавил файл в 'index' с:

git add myfile.java

Как мне узнать SHA1 этого файла?

Ответы [ 3 ]

75 голосов
/ 18 июня 2014

Это старый вопрос, но кое-что требует уточнения:

Этот вопрос и ответы ниже говорят о хите 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 (с немного другим форматом вывода).

55 голосов
/ 20 января 2009

Вы хотите, чтобы опция -s была git ls-files. Это дает вам режим и хэш sha1 файла в индексе.

git ls-files -s myfile.java

Обратите внимание, что вы не хотите git hash-object, так как это дает вам идентификатор sha1 файла в рабочем дереве в том виде, как он есть в настоящее время, а не файла, который вы добавили в индекс. Они будут другими после внесения изменений в копию рабочего дерева после git add.

18 голосов
/ 20 января 2009
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7
...