git filter-branch

git filter-branch,可以用来重写仓库的历史记录,可以用它来过滤掉包含敏感信息的提交。

  1. 克隆仓库
git clone https://github.com/username/repository.git
cd repository
  1. 这里以我要去除的ip和域名,47.147.43.22和51cto.com为例,
	git filter-branch --tree-filter '
	    sed -i -e "s/51cto.com/yoururl.com/g" \
	    -e "s/47.147.43.22/xx.xx.xx.xx/g" \
	    -e "s/192.168.69.93/xx.xx.xx.xx/g" \
	    path/to/your/file
	' HEAD
  • --tree-filter:对每个提交的文件树执行指定的命令。
  • sed -i -e "s/lesson-plan.xyz/yoururl.com/g":替换文件中的域名。
  • sed -i -e "s/47.147.43.22/xx.xx.xx.xx/g":替换文件中的IP地址。
  • sed -i -e "s/192.168.69.93/xx.xx.xx.xx/g":替换文件中的另一个IP地址。
  • path/to/your/file:需要替换的文件路径。
  • HEAD:表示从最新的提交开始重写历史。

因为这里打算对所有文件进行筛查,所以将path/to/your/file替换为{} +

  • {}:占位符,表示当前找到的文件。
  • +:表示对多个文件执行相同的命令。

如果报错了

fatal: detected dubious ownership in repository at '/media/anonymization/xxx'
To add an exception for this directory, call:

        git config --global --add safe.directory /media/anonymization/xxx

就按照要求进行设置文件夹可信赖即可,

git config --global --add safe.directory /media/anonymization/xxx

成功后大概是这个样子的

sed: 保留 “./templates/1/sedbmdt2F” 的权限未改变: 不允许的操作
sed: 保留 “./templates/1/sed4kJejF” 的权限未改变: 不允许的操作
sed: 保留 “./templates/1/sedmcnfGa” 的权限未改变: 不允许的操作
sed: 保留 “./templates/2/sed2SuvyK” 的权限未改变: 不允许的操作
sed: 保留 “./templates/727/sed8HI0uB” 的权限未改变: 不允许的操作
sed: 保留 “./templates/727/sedFZ8gl8” 的权限未改变: 不允许的操作
sed: 保留 “./templates/728/sedZCo1Gr” 的权限未改变: 不允许的操作
sed: 保留 “./__pycache__/sedcWuE4J” 的权限未改变: 不允许的操作

Ref 'refs/heads/main' was rewritten
  1. 强制推送更改
	git push origin --force --all
	git push origin --force --tags

这里还有glm-4-plus提供的两外两种方法,未尝试,仅供参考

BFG Repo-Cleaner

https://rtyley.github.io/bfg-repo-cleaner/

image.png

GitHub Actions中的敏感数据删除工具

创建一个GitHub Actions工作流,使用脚本自动替换敏感数据并重新提交。