项目场景:
有时候我们在修改项目的配置信息时,不小心把一些敏感信息配置到项目当中,众所周知,git可以查看文件的所有的修改记录。此时就需要一个更加强大的工具,在不修改其它文件的修改记录,单单删除我们提交的那个文件的修改记录,就算查看文件git log也是没办法翻出铭感信息的
例如:我们项目当中的application.yml文件配置了一些敏感信息,后续考虑到这些敏感信息的安全风险,决定使用nacos去管理配置,需要将历史的提交信息给删除掉,假设我们想删除datasource相关的提交记录。
yml
spring:
profiles:
active: test
server:
max-http-header-size: 48000
---
#生产环境配置
spring:
profiles: prod
#mysql数据库配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1/push?characterEncoding=utf8&useSSL=true
username: push
password: push
hikari:
max-lifetime: 120000
解决方案:
提示:通过git filter-branch去进行提交记录的过滤处理与删除,该操作有很大的风险,会强行的修改所有人对于这个文件修改的协同操作,请备份分支后操作
-
cd到项目路径下,
隐藏文件.git文件的同级目录
-
执行命令去删除某个文件的git提交记录,我这边还是拿我上边举例的application.yml文件操作
bashgit filter-branch --force --index-filter "git rm --cached --ignore-unmatch \ src/main/resources/application.yml" --prune-empty --tag-name-filter cat -- --all
-
执行过程中就会出现git提交记录的修改日志
-
执行完成后就会给出如下的提示
-
最后一步,需要将这写修改的记录强推到远程,
至此该文件已经被项目删除,且提交记录也全都从git的日志列表当中删除,我们重新创建一个安全的application.yml进行重新提交即可
bashgit push origin --force --all