从 Git 仓库中删除敏感数据

文章目录 (?) [+]

    # 将 PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 替换为您要删除的文件的路径,而不仅仅是其文件名。如果含有敏感数据的文件曾经存在于任何其他路径中(因为它已被移动或重命名),则也必须在这些路径上运行此命令。这些参数将:
    # 强制 Git 处理但不检出每个分支和标记的完整历史记录
    # 删除指定的文件,以及因此生成的任何空提交
    # 覆盖现有的标记
    
    # 重写历史
    # --force 拒绝从现有的临时目录开始,强制执行改写操作
    # --index-filter 与 tree-filter 相比不检查树,和 git rm 搭配使用更快的生成版本
    # --ignore-unmatch 即使没有文件匹配,也以零状态退出
    # --prune-empty 删除修改后的提交为空记录
    # --tag-name-filter cat 来简单地更新标签
    # --all 是针对所有的分支,前面的 -- 是为了让分隔 git filter-branch 和 --all 以将命令行选项与文件列表分开
    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
    
    # 强制推送本地以覆盖远程所有分支
    git push --force --all
    
    # 从标记的发行版删除敏感文件
    git push --force --tags
    
    # 确认无误后整理版本库
    # git for-each-ref 输出指定位置所有 reflog 条目,--format 指定带有特定字符的 Object
    # git update-ref 更新 reflog 条目
    git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
    
    # 让撤销的提交立即过期
    git reflog expire --expire=now --all
    
    # 整理版本库并清理未被关联的松散对象
    git gc --aggressive --prune=now


    参考资料

    https://docs.github.com/cn/github/authenticating-to-github/removing-sensitive-data-from-a-repository

    https://www.worldhello.net/gotgit/02-git-solo/110-git-admin.html


    本文标题:从 Git 仓库中删除敏感数据
    本文链接:https://lanseyujie.com/post/remove-sensitive-data-from-git-warehouse.html
    版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0
    上一篇:Linux 常用命令
    下一篇:激活 Windows 10