2

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

背景:

每次更改存储库的另一个目录中的任何文件时,我都试图自动将存储库中一个文件中的字符串更改为唯一值。

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

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

4

2 回答 2

3

这并不完全涵盖您的答案,但这是一种计算提交中树的索引的方法,而无需先实际创建新提交。

如果你运行git write-tree --prefix <subdirectory>/,它将把树写出,就像它在索引中一样,写入磁盘,并返回哈希值。这正是执行提交时无论如何都会创建的对象。

于 2012-04-20T18:53:10.757 回答
0

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

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

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

于 2012-04-20T18:21:27.153 回答