web-dev-qa-db-ja.com

Git-インデックス内の個々のファイルのSHA1を見つける

私はファイルを「インデックス」に追加しました:

git add myfile.Java

このファイルのSHA1を見つけるにはどうすればよいですか?

42
git-noob

-sオプションをgit ls-filesにしたい。これにより、インデックス内のファイルのモードとsha1ハッシュが得られます。

git ls-files -s myfile.Java

git hash-objectは必要ないことに注意してください。これにより、作業ツリー内のファイルのsha1 IDが現在の状態のままであり、インデックスに追加したファイルのIDではありません。 git addの後に作業ツリーのコピーを変更すると、これらは異なります。

60
CB Bailey

これは古い質問ですが、1つ明確化が必要です。

この質問と以下の回答は、ファイルの Gitハッシュと完全に同じではないについて述べています。質問で尋ねられた「このファイルのSHA1」

要するに:

インデックス内のファイルの Gitハッシュを取得したい場合-参照 Charles Baileyによる回答

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合計ではなく、文字列 "blob SIZE\0CONTENT" のsha1合計です "blob" は文字列 "blob"(スペースが後に続く)、 [〜#〜] size [〜#〜] はファイルですバイト単位のサイズ(ASCII 10進数)、 "\ 0" はnull文字、 [〜#〜] content [〜#〜] は実際のファイルのコンテンツです)。

質問で文字通り尋ねられたように、 "このファイルのSHA1" だけを取得したい場合:

sha1sum < $file

ない場合sha1sumを使用できますshasum -a1またはopenssl dgst -sha1(出力形式が少し異なります)。

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