搜索所有Git历史记录中的字符串?

时间:2010-12-17 06:49:55

标签: git

我有一个代码库,我想将其作为开源推送到GitHub。在这个git控制的源代码树中,我有一些包含密码的配置文件。我确保不跟踪此文件,我还将其添加到.gitignore文件中。但是,我希望绝对肯定的是,没有任何敏感信息会被推送,也许是因为某些事情在提交之间滑落了。我怀疑我做得不够粗心,但我希望积极

有没有办法“grep”所有的git?我知道这听起来很奇怪,但“全部”我的意思是每个文件的每个版本都存在。我想如果有一个命令为每次提交转储diff文件,那可能有用吗?

3 个答案:

答案 0 :(得分:988)

Git可以使用-S选项搜索差异(它叫做pickaxe in the docs

git log -Spassword

这将找到添加或删除字符串password的任何提交。这里有几个选项:

  • -p:将显示差异。如果您提供文件(-p file),它将为您生成补丁。
  • -G:查找添加或删除的行与给定正则表达式匹配的差异,而不是-S,“查找引入或删除字符串实例的差异”。
  • --all:搜索所有分支和标签;或者,使用--branches[=<pattern>]--tags[=<pattern>]

答案 1 :(得分:77)

git rev-list --all | (
    while read revision; do
        git grep -F 'password' $revision
    done
)

答案 2 :(得分:29)

尝试以下命令搜索所有先前跟踪文件中的字符串:

git log --patch  | less +/searching_string

git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'

需要从您要进行搜索的父目录运行。

相关问题