我想使用git树对象中使用的哈希来唯一地标识git下子目录的状态,特别是作为构建避免的工件仓库的索引。像这样:
# Get hash for source tree in <path-do-dir>/<dir-name>
git cat-file -p HEAD^{tree}:<path-to-dir> | awk '$4 == "<dir-name>" { print $3 }'
我的问题是这些哈希是否真的是持久的。天真的实验表明它有效,但我想知道是否有人这样做是真的。
答案 0 :(得分:4)
这里的^{tree}
实际上对你没有任何帮助。
有一种更简单的方法:
git rev-parse HEAD:<path-to-dir>/<dir-name>
e.g:
$ git cat-file -p HEAD:t | awk '$4 == "t9604" { print $3 }'
846893f0b08b1fa03a6383c9a4deade32c16e929
$ git rev-parse HEAD:t/t9604
846893f0b08b1fa03a6383c9a4deade32c16e929
树对象的SHA-1是树的“内容”的校验和,也就是说,它的树形图,以及树中所有名称的列表及其模式和类型,以及SHA-1的。所以,是的:它标识了目录的状态。它可能会强烈地识别它 ,因为如果树中包含的任何blob甚至改变模式(+x
或-x
),它都会改变。
如果您想确保HEAD:path
命名树(不是blob),可以在git cat-file -t
的结果上使用rev-parse
(但这可能不需要)。