git:在预提交钩子中使用对象shas

时间:2012-04-20 17:55:03

标签: git

在提交更改之前,有没有办法确定文件(或理想情况下是树)的新git sha?

背景:

每次修改回购邮件的另一个目录中的任何文件时,我都会尝试自动将我的仓库中的一个文件中的字符串更改为唯一值。

我在想一个简单的方法就是编写一个git钩子,它只使用子目录树的sha作为唯一字符串。这似乎可以直接用git ls-tree作为后提交钩子,但这需要额外的虚拟提交来每次提交字符串,产生额外的噪音。

到目前为止,我已经确定通过运行git hash-object可以实现这一点,但是我必须编写一个稍微复杂的脚本来递归地构建目录中文件的哈希值,以便最终计算出来。目录的哈希值(树)。我想知道是否有更简单的选择。

2 个答案:

答案 0 :(得分:3)

这不是完全覆盖你的答案,但是这里有一个方法来计算树的索引在提交中的内容,而不是先实际创建新的提交。

如果你运行git write-tree --prefix <subdirectory>/,它会将索引中的树写到磁盘上,然后返回哈希值。这正是执行提交时无论如何都要创建的对象。

答案 1 :(得分:0)

请参阅上面的评论...但如果您想获得目录树的某种唯一标识符,您可以执行以下操作:

find directory -type f -print0 | 
  xargs -0 git hash-object | 
  git hash-object --stdin

这将计算目录中每个文件的哈希值...然后计算哈希列表的哈希值。