我有一个代码库,我想将其作为开源推送到 GitHub。在这个由 git 控制的源代码树中,我有一些包含密码的配置文件。我确保不跟踪此文件,并且还将其添加到.gitignore
文件中。但是,我绝对肯定不会推送任何敏感信息,也许是在提交之间有什么错位之类的话。我怀疑我是否粗心,无法做到这一点,但我想保持积极 。
有没有一种方法可以 “grep” 所有的 git?我知道这听起来很奇怪,但是 “全部” 是指曾经存在的每个文件的每个版本。我猜是否有一个命令可以为每次提交转储差异文件,这可能行得通吗?
Git 可以使用 - S 选项搜索差异( 在 docs 中称为 pickaxe)
git log -Spassword
这将查找添加或删除了字符串password
所有提交。这里有一些选择:
-p
:将显示差异。如果提供文件( -p file
),它将为您生成一个补丁。 -G
:查找添加或删除的行与给定 regexp 相匹配的差异,而不是-S
,它查找引入或删除字符串实例的差异。 --all
:搜索所有分支和标签;或者,使用--branches[=<pattern>]
或--tags[=<pattern>]
git rev-list --all | (
while read revision; do
git grep -F 'password' $revision
done
)
尝试使用以下命令在所有先前跟踪的文件中搜索字符串:
git log --patch | less +/searching_string
要么
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
它需要从您要进行搜索的父目录中运行。