我有一个代码库,我想将其作为开源推送到GitHub。在这个git控制的源代码树中,我有一些包含密码的配置文件。我确保不跟踪此文件,我还将其添加到.gitignore
文件中。但是,我希望绝对肯定的是,没有任何敏感信息会被推送,也许是因为某些事情在提交之间滑落了。我怀疑我做得不够粗心,但我希望积极。
有没有办法“grep”所有的git?我知道这听起来很奇怪,但“全部”我的意思是每个文件的每个版本都存在。我想如果有一个命令为每次提交转储diff文件,那可能有用吗?
答案 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'
需要从您要进行搜索的父目录运行。