美文网首页
git 清理历史敏感信息

git 清理历史敏感信息

作者: 南慕瑶 | 来源:发表于2020-04-22 18:09 被阅读0次

    【Step1】先备份你要清理的文件

    【Step2】切换到需要操作的分支,清除历史记录中待删除的文件

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch [path-to-your-remove-file]' --prune-empty --tag-name-filter cat -- --all

    其中,[path-to-your-remove-file] 就是你要删除的文件的相对路径(相对于git仓库的根目录),替换成你要删除的文件即可。 

    注意一点,这里的文件或文件夹,都不能以 '/' 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。如果你要删除的目标不是文件,而是文件夹,那么请在

    git rm --cached' 命令后面添加 -r 命令,表示递归的删除(子)文件夹和文件夹下的文件,类似于 'rm -rf 命令。

    如果你看到类似下面这样的,就说明删除成功了:

    Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)

    # Ref 'refs/heads/master' was rewritten

    【Step3】推送我们修改后的repo

    git push origin [分支名] --force

    【注】

    如果 push 的是保护分支,会报权限错误。先去除保护后,再执行。

    【Step4】新建脱敏后的配置文件,git add & git commit 提交

    【Step5】清理 tag 中的历史记录

    【warning】

    操作前,一定记得手动备份下原有 tag 的 log、描述等信息!

    git tag # 查看 tag 列表

    git checkout -b tag1 v1.0.0 # 检出该 tag v1.0.0 到分支 tag1

    git tag -d v1.0.0 # 删除 tag v1.0.0

    git push origin :refs/tags/v1.0.0 # 推送远程

    git tag v1.0.0 # 新建 tag

    git push origin v1.0.0 # 推送远程

    git checkout master # 切换到主分支

    git branch -d tag1 # 删除临时分支 tag1

    【Step6】清理和回收空间

    rm -rf .git/refs/original/

    git reflog expire --expire=now --all

    git gc --prune=now

    git gc --aggressive --prune=now

    可对比操作前后 .git 文件夹大小,变小说明操作成功~\(^o^)/ 

    【Step7】如有其它需要清理的分支,切换分支,从头再来一次。over~

    相关文章

      网友评论

          本文标题:git 清理历史敏感信息

          本文链接:https://www.haomeiwen.com/subject/ivcwihtx.html