【发布时间】:2020-01-08 03:20:52
【问题描述】:
我有一个文件是在某个时候从 git 存储库复制的。我想找到文件被复制到的 SHA。
目前我将获取所有 SHA 的列表,并将每个 SHA 的文件与我拥有的文件进行比较,但我希望有更好的方法。
【问题讨论】:
-
具有一个特定名称的文件可以在许多甚至每个提交中。每个提交都有一个文件副本。每个提交可能共享文件的相同副本,或者部分或全部提交可能具有该文件的不同副本。你到底想从 Git 中得到什么?有一种相对快速的方法可以找到该文件存在的每个提交并且与您拥有的副本完全匹配,但当然不能保证任何此类提交存在。
-
理论上,您可以计算文件的 SHA,它应该对应于 Git repo 中某些 BLOB 的 SHA。使用 blob SHA,您可以通过 stackoverflow.com/questions/223678/which-commit-has-this-blob 找出哪些提交包含此 blob。这应该可以帮助您识别包含此类文件的第一个或最后一个提交。但是,如果您想找出从中复制文件的特定提交,那几乎是不可能的。
-
要获取某个文件将插入到 Git 存储库时的哈希值,请使用
git hash-object。 -
@torek 我认为 OP 可能会喜欢你提到的这种“相对快速的方式”(我有兴趣看到它)
-
@D.BenKnoble:啊哈,我没有看到
--find-object选项。它最初是在 Git 2.17 中引入的。它的作用类似于-S,因此它不会找到包含对象的每个提交,而是会找到添加或删除对象副本的每个提交。
标签: git