情境:我有一个来自Github项目的tar.gz版本发布包,但想要确定它是从哪个提交中获取的。它似乎没有被标记,也不明显从提交消息本身中看出。
因此,我可以计算文件的sha1,但想知道这些文件属于哪个提交?
呼叫Git高手!
情境:我有一个来自Github项目的tar.gz版本发布包,但想要确定它是从哪个提交中获取的。它似乎没有被标记,也不明显从提交消息本身中看出。
因此,我可以计算文件的sha1,但想知道这些文件属于哪个提交?
呼叫Git高手!
由于文件属性可能会变得棘手,因此这种方法可能有些麻烦。假设它们没有改变或者你查看了仓库存储的内容,请确保它们是相同的。将其提交到仓库中,然后查看树的哈希值。
git show -s --pretty=format:%T HEAD
git log --all --format=%H
这将为您提供所有提交哈希值。现在将其导入以显示树哈希值。
git log --all --format=%H \
| xargs -n 1 git show -s --pretty='format:%H %T' \
| gerp <hash of your tree>
如果tar文件包含完全相同的结构和权限,输出将显示具有相同树的提交的SHA1值。
搜索顶层树的SHA1将非常快速。
由于Git存储的哈希值不仅包括文件内容(理论上,哈希冲突仍然会发生),为了确保您拥有正确的文件版本,您需要比较内容。
for rev in $(git log --format=%H -- /path/to/file); do
git diff --quiet $x:/path/to/file my-current-file;
if [[ $? -eq 0 ]]; then
echo $x;
fi
done