鉴于blob对象的哈希值(可能是在以前的版本中采用),如何找到
用例的一些细节:
我们使用git存储库来存储作为文档生成一部分的文件。
文件随时间而变化(因此repo;))。保存文件并参考仓库中的文件。
为保持一致性,保存的文档将在创建文档的时间点引用文件版本。
所以我认为保持对象哈希应该足够,因为这可以准确识别使用的文件版本。
但是,我现在面临以下问题:我想建议将文档升级到较新版本的文件。所以我必须
我仍然找不到任何简单的方法来实现这一目标。有没有,或者我应该重新考虑我跟踪合成文件的方式吗?
答案 0 :(得分:1)
要根据对象哈希获取历史记录,您可以使用此bash脚本:
传递哈希作为命令行arg,你将获得提交sha。
#!/bin/sh
blob=$1
git rev-list --all |
while read commit; do
if git ls-tree -r $commit | grep -q $blob; then
echo $commit
fi
done
当你有提交sha时,你可以运行
git log [sha] --name-only
这将给你文件名。最后:
git log --follow - [filename]
这仅在当前版本文件路径与快照时的路径相同时才有效。但是会显示所有历史文件更改(假设使用了git mv)
如果不是这种情况,仍然可以通过使用git ls-tree来遍历所有提交,并且如果到达树节点,则将其遍历到其文件叶节点。 但是,您将手动需要找出它们之间的问题 路径A)a / b / foo.txt 和 路径B)c / d / foo.txt
它是否与foo.txt相同或不同?
根据我的经验,最好有一个好的文件命名约定并存储提交sha而不是文件blob sha。 从提交到另一个方式来获取文件blob sha要容易得多。