# 前言

在将 github 私有仓库转为公开仓库时,常常需要对隐私数据(例如密码、密钥等等)进行脱敏操作,由于 git 的 appendonly 的特性仅删除最后一个节点的文件是不够的,我们需要遍历所有节点筛选出该文件的所有历史节点,对这些历史节点进行重写以完全去除敏感数据。

# 步骤

参考资料:从仓库中删除敏感数据 - GitHub Docs

总共有两种方法:

# BFG

h
bfg --delete-files ${yourfile_name}

使用 bfg 命令行工具其优点在于命令简单,但是由于是 java 命令行工具,需要 jre 环境

# Git 命令行

  1. 删除本地分支中的该文件

    h
    git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" --prune-empty --tag-name-filter cat -- --all
  2. 强制推送到远程分支 (注意该操作不可逆)

    h
    git push --force
    git push --tags --force

P.S. 数据删除需谨慎,该操作不可逆