我有一个git存储库,大约有一千个提交,我有一份JSON文件,我知道该文件在存储库中的路径。
这是我的裸文件,我们称之为person.json
。
{
"name": "Thomas",
"age": 30
}
我知道在git历史的某个时刻,这个文件存在于git repo中。其相对路径为CCD_ 2且从未改变。
考虑到这三件事:
REPO_URL
- 本地
person.json
文件 - 路径CCD_ 5
我的目标是输出文件person.json
在repo中精确出现/匹配的所有提交哈希。
显而易见的手动解决方案是在repo中循环所有提交,并在我拥有的文件和文件应该在的位置之间进行校验和匹配。这是可能的,但对许多文件来说需要很长时间。
git有没有本地的方法?
这是一个简单的本地操作,在一个不错的盒子上(不确定窗口(的回购上会花费很小的时间。。。所以,获取文件的哈希。。。。像这样:
git ls-tree -r HEAD | grep the-file
就我而言:
$ git ls-tree -r HEAD | grep pom.xml
100755 blob some-hash-id pom.xml
你取一些哈希id,然后这样做:
git log --all --pretty=%h | while read revision; do
lines=$( git ls-tree -r $revision | grep some-hash-id | wc -l )
if [ $lines -gt 0 ]; then
echo The file is present in $revision
git ls-tree -r $revision | grep some-hash-id
echo
fi
done
就是这样。