我试图找到一种方法,如何在git repo上搜索具有确切内容(100%匹配)的文件。假设我有这个简单的场景:
我在本地创建了一个新的git repo。创建文本文件名: myFile.txt,内容为" 1"。并将其交给回购。只为 举一个简单的例子,SHA-1哈希的前四个字母是 " 1111&#34 ;.
然后我用内容" 2"修改了myFile.txt。并致力于 回购。 SHA-1将是" 2222"。
然后我再次使用内容" 3"并承诺回购。 SHA-1将是" 3333"。
现在,我修改了文件并添加了内容" 1"。 (这次我不会提交)
我如何能够知道myFile1.txt在所有以前的提交中具有相同内容的提交?有命令这样做吗? e.g。
git-find-the-file myFile.txt
output: The same file is on commit "1111"
我希望用它来查找文本和二进制文件。我的实际应用是在Git Repo上找到相同的word文档,提交的次数超过100次。
先谢谢。
答案 0 :(得分:1)
您可以使用以下内容查看与该文件相关的所有更改。
gitk myFile.txt
答案 1 :(得分:1)
试
git log --raw --abbrev=40 --pretty=oneline |
grep -B 1 `git hash-object filename`
参考:Git User Manual-Finding commits referencing a file with given content
答案 2 :(得分:0)
myfile=`git hash-object myfile.txt`
git rev-list HEAD | while read rev; do
[[ `git rev-parse $rev:myfile.txt` = $myfile ]] && echo $rev
done
如果要检查最后阶段的又名最后添加的内容而不是当前的工作树内容,请将git rev-parse :myfile.txt
替换为哈希对象。
答案 3 :(得分:0)
作为个人挑战并试用Python git模块,我创建了一个小型Python程序,也应该这样做。首先安装Python git模块然后运行它" findFile.py pathToRepo pathToFileToFind"它将列出所有提交和repo中找到的文件的路径。请注意,这应该找到该文件的所有实例(即使它根据文件的SHA进行搜索而重命名)以及repo中的任何路径。