17385


特定のブランチなど(tree-ish なオブジェクト)に存在する、特定のファイルの SHA-1 ハッシュを取得したいと考えています。

git の原理的に、checkout などによって index や worktree
に対して変更を加えずとも、これを実現する方法はありそうだと考えているのですが、ご存知の方はいらっしゃいますでしょうか。

例えば:

[code]

    git THECOMMAND HEAD:hoge-dir/fuga-file
    git THECOMMAND origin/develop:README
    
[/code]

などで、該当するファイルの SHA-1 ハッシュを取得できたらよいと考えています。


CC BY-SA 3.0
2015-10-07T15:53:19.473
17382
2015-10-07T17:31:36.327
754
question
git
<tree-ish>:path/to/file で指定されるようなファイルの SHA-1 hash を取得するには？


確かに Git は SHA-1
ハッシュでオブジェクトを識別していますが、これはあくまでオブジェクトのハッシュであり、ファイルなどのデータ本体のハッシュではありません。

具体的には、データ本体の前にオブジェクトの種類や長さを付加したものが Git
におけるオブジェクトであり、これをハッシュ関数にかけたものがオブジェクトIDになっています。

  * [Git の仕組み (1) - こせきの技術日記](http://koseki.hatenablog.com/entry/2014/04/22/inside-git-1#3)
  * [Git - Git Objects](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects) （もしくは[日本語訳](http://git-scm.herokuapp.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8)）

・・・とここまで書いて、「計算済みのハッシュ値を取り出したい」とは書かれていないことに気づきました。

[code]

    git show origin/develop:README
    
[/code]

で当該オブジェクトの中身を表示できるので、これを sha1sum にでも流して

[code]

    git show origin/develop:README | sha1sum
    
[/code]

という感じでどうでしょうか。

ちなみにファイルパスを `./` から始めると、相対パスとして扱われるようです。


CC BY-SA 3.0
2015-10-07T17:26:32.130
17385
2015-10-07T17:31:36.327
2015-10-07T17:31:36.327
8000
8000
17382
answer