git树哈希可以用来唯一标识子目录中的特定状态

Chr*_*tze 4 git hash

我想使用 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 }'
Run Code Online (Sandbox Code Playgroud)

我的问题是这些哈希值是否真正持久。天真的实验表明它是有效的,但我想知道是否有人真正这样做。

tor*_*rek 5

这里^{tree}实际上对你没有任何好处。

还有一个更简单的方法:

git rev-parse HEAD:<path-to-dir>/<dir-name>
Run Code Online (Sandbox Code Playgroud)

例如:

$ git cat-file -p HEAD:t | awk '$4 == "t9604" { print $3 }'
846893f0b08b1fa03a6383c9a4deade32c16e929
$ git rev-parse HEAD:t/t9604
846893f0b08b1fa03a6383c9a4deade32c16e929
Run Code Online (Sandbox Code Playgroud)

树对象的 SHA-1 是树“内容”的校验和,也就是说,它的树性,加上树中所有名称及其模式和类型以及 SHA-1 的列表。所以,是的:它标识了目录的状态。它可能会过于强烈地识别它,因为如果树中包含的任何斑点甚至改变模式(+x-x),它就会改变。

如果你想确保命名一棵树(而不是一个斑点),你可以在结果上使用(但这里可能不需要)。HEAD:pathgit cat-file -trev-parse