web-dev-qa-db-fra.com

Git - trouver le SHA1 d'un fichier individuel dans l'index

J'ai ajouté un fichier à l'index avec:

git add myfile.Java

Comment connaître le SHA1 de ce fichier?

42
git-noob

Vous voulez le -s option à git ls-files. Cela vous donne le mode et le hachage sha1 du fichier dans l'index.

git ls-files -s myfile.Java

Notez que vous ne voulez pas git hash-object car cela vous donne l'identifiant sha1 du fichier dans l'arborescence de travail tel qu'il est actuellement, pas du fichier que vous avez ajouté à l'index. Celles-ci seront différentes une fois que vous aurez apporté des modifications à la copie de l'arborescence de travail après le git add.

60
CB Bailey

C'est une vieille question mais une chose doit être clarifiée:

Cette question et les réponses ci-dessous parlent de le hachage Git d'un fichier qui n'est pas exactement le même que "le SHA1 de ce fichier" comme posé dans la question.

En bref:

Si vous voulez obtenir le hash Git du fichier dans l'index - voir la réponse de Charles Bailey :

git ls-files -s $file

Si vous voulez obtenir le hachage Git de n'importe quel fichier sur votre système de fichiers - voir la réponse de cn :

git hash-object $file

Si vous voulez obtenir le hachage Git de n'importe quel fichier sur votre système de fichiers et que Git n'est pas installé :

(echo -ne "blob `wc -c < $file`\0"; cat $file) | sha1sum

(Ce qui précède montre comment le hachage Git est réellement calculé - ce n'est pas la somme sha1 du fichier mais une somme sha1 de la chaîne "blob SIZE\0CONTENT" "blob" est littéralement une chaîne "blob" (elle est suivie d'un espace), [~ # ~] size [~ # ~] est la taille du fichier en octets (an ASCII decimal), "\ 0 " est le caractère nul et [~ # ~] content [~ # ~] est le contenu réel du fichier ).

Si vous voulez obtenir juste "le SHA1 de ce fichier" comme cela a été littéralement demandé dans la question:

sha1sum < $file

Si vous n'avez pas sha1sum vous pouvez utiliser shasum -a1 ou openssl dgst -sha1 (avec un format de sortie légèrement différent).

90
rsp
$ git hash-object myfile.Java
802992c4220de19a90767f3000a79a31b98d0df7
21
cnu