git filter-branch
git filter-branch
,可以用来重写仓库的历史记录,可以用它来过滤掉包含敏感信息的提交。
- 克隆仓库
git clone https://github.com/username/repository.git
cd repository
- 这里以我要去除的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
- 强制推送更改
git push origin --force --all
git push origin --force --tags
这里还有glm-4-plus提供的两外两种方法,未尝试,仅供参考
BFG Repo-Cleaner
https://rtyley.github.io/bfg-repo-cleaner/
GitHub Actions中的敏感数据删除工具
创建一个GitHub Actions工作流,使用脚本自动替换敏感数据并重新提交。