我正在尝试找到一种方法来搜索git repo上内容完全匹配的文件(100%匹配),假设我有这样一个简单的场景:
- 我在本地创建了一个新的git repo。创建一个文本文件名:myFile.txt,内容为“1”。并将其提交到repo。仅为了简单的示例,SHA-1散列的前四个字母是“1111”。
- 然后我修改了myFile.txt的内容为“2”,并提交到repo。SHA-1将是“2222”。
- 然后我用内容“3”再次修改它,并提交到repo。SHA-1将是“3333”。
- 现在,我修改了文件,放了一个内容“1”。这次我还不会提交。
我怎样才能知道myFile1.txt在哪个提交中与之前的所有提交具有相同的内容?有没有这样的命令?例如:
git-find-the-file myFile.txt
output: The same file is on commit "1111"
我希望用它来查找文本和二进制文件。我的实际应用程序是在Git Repo上查找相同的Word文档,提交次数超过100次。
5条答案
按热度按时间6gpjuf901#
尝试
参考:Git User Manual-Finding commits referencing a file with given content
roqulrg32#
可以使用以下命令查看与该文件相关的所有更改。
gitk myFile.txt
kiayqfof3#
如果你想检查最后阶段的内容,也就是最后添加的内容,而不是当前的工作树内容,用
git rev-parse :myfile.txt
代替hash-object。apeeds0o4#
作为一个个人挑战,也是为了尝试Python git模块,我创建了一个小的Python程序,它也应该可以做到这一点。首先安装Python git模块,然后以“findFile.pypathToRepo pathToFileToFind”运行它,它将列出所有提交以及在repo中找到的文件的路径。注意,这应该会找到文件的所有示例(即使它重命名,因为它基于文件的SHA进行搜索)和repo内的任何路径。
它位于https://github.com/dneiss/findFile。
twh00eeo5#
要查找包含确切文件和确切内容的所有提交,可以使用git log命令,并带有--all和--grep选项。
使用以下命令搜索包含确切文件和确切内容的提交:
git log --all --grep='<content>' -- <file>