获取repo中文件完全匹配时的所有提交哈希



我有一个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

就是这样。

最新更新