Ich habe eine Datei in den ‚Index‘ aufgenommen mit:Git - Suche nach dem SHA1 einer einzelnen Datei im Index
git add myfile.java
Wie kann ich die SHA1 dieser Datei herausfinden?
Ich habe eine Datei in den ‚Index‘ aufgenommen mit:Git - Suche nach dem SHA1 einer einzelnen Datei im Index
git add myfile.java
Wie kann ich die SHA1 dieser Datei herausfinden?
Sie wollen die -s
Option git ls-files
. Dies gibt Ihnen den Modus und den sha1-Hash der Datei im Index.
git ls-files -s myfile.java
Beachten Sie, dass Sie nicht git hash-object
wollen, da dies Ihnen die SHA1-ID der Datei im Arbeits Baum gibt, wie es derzeit ist, nicht von der Datei, die Sie in den Index aufgenommen haben. Diese unterscheiden sich, sobald Sie Änderungen an der Arbeitsbaumkopie nach der git add
vornehmen.
Wie bekomme ich echte Datei SHA1 * von git *, als 'sha1sum README.md'? –
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7
Vielen Dank! - Das hat den Trick gemacht. –
Hier ist, warum diese Antwort schlechter als die von Charles bewertet wurde: das gibt Ihnen tatsächlich die SHA1 der Version der Datei, die sich im Arbeitsbaum befindet, nicht der indexierten/gestuften Version. Es hat auch den Nachteil, dass es die SHA1 neu berechnen muss, auch wenn sie bereits im Index gespeichert ist. –
@ JanKrüger Danke für die Klarstellung! Sehr hilfreich. Nun ist 'git hash-object' immer noch nützlich für etwas, da man sonst etwas wie' (perl -e '$ size = (-s shift); print "blob $ size \ x00"' foo.txt machen müsste && Katze foo.txt) | openssl sha1'. Außerdem erzeugt es selbst den Hash, während die "ls-files -s" offenbar einen "Cut" benötigen, um diesen Hash zu isolieren. –
Es ist eine alte Frage, aber eine Sache bedarf einer Erläuterung:
Diese Frage, die Antworten unter Diskussion über die Git Hash einer Datei, die nicht genau das gleiche wie„die SHA1 dieser Datei " wie in der Frage gefragt.
Kurz:
Wenn Sie die Git Hash der Datei in Index erhalten möchten - siehe the answer by Charles Bailey:
git ls-files -s $file
Wenn Sie die Git Hash einer Datei erhalten möchten siehe the answer by cnu - auf Ihrem Dateisystem:
git hash-object $file
Wenn Sie die Git Hash einer Datei auf Ihrem Dateisystem erhalten möchten und Sie haben nicht Git installiert:
(echo -ne "blob `wc -c < $file`\0"; cat $file) | sha1sum
(Die oben zeigt, wie die Git Hash tatsächlich berechnet wird - es ist nicht die SHA1 Summe der Datei als ein SHA1 Summe der Zeichenfolge „blob sIZE \ 0CONTENT“ wo „blob“ buchstäblich ist eine Zeichenfolge „blob“ (durch ein Leerzeichen folgt), sIZE ist die Dateigröße in Bytes (ein ASCII-Dezimal), "\ 0" ist das Nullzeichen und CONTENT ist der Inhalt der eigentlichen Datei).
Wenn Sie nur „die SHA1 dieser Datei“ erhalten möchten als buchstäblich in die Frage gestellt wurde:
sha1sum < $file
Wenn Sie nicht über sha1sum
Sie shasum -a1
oder openssl dgst -sha1
(mit verwenden können etwas anderes Ausgabeformat).
Hervorragende Antwort, ich möchte zweimal für die Compute-Hash-No-Git-Lösung upvote. – javabrett
Nur als Referenz: Art der [die umgekehrte Frage] (http://stackoverflow.com/questions/460331/git-finding-a-filename-from-a-sha1) – Albert
'git rev-parse: myfile.java' – jthill
@jthill, nicht sicher, warum dies keine eigene Antwort ist. – akhan