28025


git の tree-ish には、いくつかの書式があります。

[code]

    develop
    develop^
    HEAD
    develop:some-dir
    
[/code]

これらを引数に、 tree object の id そのものを取得するにはどうしたらいいですか？

背景: `git commit-tree` が tree-ish ではなく、 tree object の id でないと動いてくれなかったので。


CC BY-SA 3.0
2016-07-05T06:20:08.517
27349
2016-08-02T12:51:16.527
754
question
git
git の tree-ish を tree object の id に変換するには？


`git cat-file` で出力できるようです。

[code]

    git cat-file -p HEAD
    
[/code]


CC BY-SA 3.0
2016-07-05T07:34:21.850
27352
2016-07-05T07:34:21.850
76
27349
answer


@yas さんや @metropolis さんの答えを参考にすると、自分が欲しかったものは次でした。

[code]

    #!/bin/sh
    
    if [ $# -ne 1 ]
    then
        echo "usage: $0 treeish" 1>&2
        exit 1
    fi
    
    treeish="$1"
    
    case $(git cat-file -t "${treeish}") in
        commit)
            git cat-file -p "${treeish}" |
                sed -n 1p |
                awk '{print $2}'
        ;;
        tree)
            git rev-parse "${treeish}"
        ;;
    esac
    
[/code]


CC BY-SA 3.0
2016-08-02T12:51:16.527
28025
2016-08-02T12:51:16.527
754
27349
answer