山川寂寥,街市井然,居民相安无事。可惜人无身影,无记忆,无心。男女可以相亲却不能相爱。爱须有心,而心已被嵌入无数的独角兽头盖骨化为古老的梦。—— 村上春树

在项目开发过程中,难免会遇到把敏感信息(如API keys、密码、或私密文件)错误提交到Git仓库的情况(一开始推送gitee没提醒我含密匙数据,但是github提醒了我)。为了避免这些敏感信息泄露,我们需要从Git历史记录中彻底删除它们。本文介绍两种主流的方式来删除敏感信息,一种是使用 filter-repo 工具,另一种是通过修改 .gitignore 文件避免再次提交,此外还会介绍官网文档中提供的其他方法。
在这里插入图片描述

1 方法一:使用 git filter-repo 工具

git filter-repo 并不是Git的默认命令,所以需要通过 pip 来安装:

1.1 确保安装了 Python 和 pip

如果你还没有安装 Python,请前往Python官网下载安装最新版本,具体安装参考其他相关资料。
安装 Python 时会附带安装 pip,可以使用下面的命令确认是否安装成功:

python --version
pip --version

1.2 安装 git-filter-repo

使用 pip 安装 git-filter-repo:

pip install git-filter-repo

1.3 确认安装成功

安装完成后,可以通过以下命令检查是否成功安装:

git filter-repo --version

1.4 使用 git filter-repo 删除敏感信息

现在你可以使用 git filter-repo 来从仓库中删除敏感信息了。假设我们误提交了一个包含敏感信息的文件 config/secrets.yml。

1.4.1备份仓库(非常重要)

操作会直接修改你的历史记录,建议在操作前备份:

git clone --mirror <repository-url> backup-repo.git

1.4.2删除敏感文件: 使用以下命令删除提交历史中的指定文件:

git filter-repo --path config/secrets.yml --invert-paths

例如:
在这里插入图片描述
这个命令会从整个仓库的历史记录中移除 config/secrets.yml 文件。
然后就可以正常add、commit、push了。

2 方法二:修改 .gitignore 防止敏感信息提交(一劳永逸)

如果你只是想避免敏感文件被错误提交到Git仓库,最简单的方法是通过 .gitignore 文件来忽略它们。虽然这种方法无法删除历史记录中的信息,但可以防止未来的误提交。
将需要忽略的文件或文件夹路径添加到 .gitignore 文件中。例如:
在这里插入图片描述
如果该文件已经提交过,修改 .gitignore 文件并不能删除它,需要将该文件从暂存区移除:

git rm --cached config/secrets.yml
git commit -m "Remove sensitive file from tracking"

然后就可以正常推送了,不需要每次都删掉含私密文件后再上传。

3 其他方法:Git官网文档推荐的方法

参考:链接: About push protection from the command line
我一开始用了,好像没用对,还是不行。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐