Подтвердить что ты не робот

Git - поиск SHA1 отдельного файла в индексе

Я добавил файл в индекс с помощью:

git add myfile.java

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

4b9b3361

Ответ 1

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

git ls-files -s myfile.java

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

Ответ 2

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

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

Ответ 3

$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7