本文最后更新于 280 天前,其中的信息可能已经有所发展或是发生改变。
在我们的日常开发过程中,我们可能会不小心将一些敏感数据(例如密码或SSH密钥)提交到Git仓库中。这可能会带来一定的安全风险,因为即使你在后续的提交中删除了这些数据,它们仍然会在历史记录中留下痕迹。今天,我将介绍如何从Git仓库的历史记录中删除这些敏感数据。
注意: 一旦你将敏感数据提交到GitHub,就应该将这些数据视为已经泄露。如果你已经提交了密码,你应该更改这些密码。如果你已经提交了密钥,你应该生成新的密钥。删除泄露的数据并不能解决其初始暴露问题,尤其是在仓库的现有克隆或复刻中。
使用 git filter-repo
要删除包含敏感数据的文件,并将其添加到 .gitignore,以确保不会意外地重新提交,我们可以使用 git filter-repo
。
首先,我们需要安装 git filter-repo
工具的最新版本。 可以手动安装 git-filter-repo,也可以使用包管理器安装。 例如,若使用 HomeBrew 安装工具,请使用 brew install 命令。
brew install git-filter-repo
有关详细信息,请参阅 newren/git-filter-repo 存储库中的 INSTALL.md。
然后,我们需要将存储库克隆到本地计算机。如果存储库的本地副本的历史记录中没有敏感数据,我们可以直接使用以下命令:
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
接着,我们需要导航到存储库的工作目录。
cd YOUR-REPOSITORY
然后运行删除历史提交的命令
git filter-repo --strip-blobs-bigger-than 0M
然后,你可以使用以下命令将更改推送回 GitHub:
git push origin --force --all
或者
git push origin --mirror --force
注意,使用--force
或--mirror
的时候需要非常小心,因为这将会重写你的远程仓库的历史,这个操作是不可逆的。在你执行这样的操作之前,确保你已经备份了你的代码和其他重要的数据。