git 如何找到包含确切文件和确切内容的所有提交?

6l7fqoea  于 2023-03-11  发布在  Git
关注(0)|答案(5)|浏览(179)

我正在尝试找到一种方法来搜索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次。

6gpjuf90

6gpjuf901#

尝试

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

roqulrg3

roqulrg32#

可以使用以下命令查看与该文件相关的所有更改。
gitk myFile.txt

kiayqfof

kiayqfof3#

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代替hash-object。

apeeds0o

apeeds0o4#

作为一个个人挑战,也是为了尝试Python git模块,我创建了一个小的Python程序,它也应该可以做到这一点。首先安装Python git模块,然后以“findFile.pypathToRepo pathToFileToFind”运行它,它将列出所有提交以及在repo中找到的文件的路径。注意,这应该会找到文件的所有示例(即使它重命名,因为它基于文件的SHA进行搜索)和repo内的任何路径。
它位于https://github.com/dneiss/findFile

twh00eeo

twh00eeo5#

要查找包含确切文件和确切内容的所有提交,可以使用git log命令,并带有--all和--grep选项。
使用以下命令搜索包含确切文件和确切内容的提交:
git log --all --grep='<content>' -- <file>

相关问题