• 彻底删除 Git 项目中的文件(BFG Repo-Cleaner 用法)


    一些时候由于开发初期经验不足和贪图方便, 会把一些不应该提交到 Git 的文件上传到 Github, 带来一系列安全问题, 更有可能是把一些大文件上传到 GitHub 上, 导致项目非常臃肿, 每次 pull、push 都要花费很多时间.

    超 100000 个 GitHub 代码库泄露了 API 或加密密钥

    关于如何更好的管理大文件, 可以阅读 更好的在 Git 项目中保存大文件(Git LFS 的使用) - 质子 - 博客园 .

    这时候就可以寻求一些特殊的工具的帮助, BFG Repo-Cleaner by rtyley 就是这样一款工具, 可以从 Git 项目中彻底删除某一个文件的历史记录.

    下载及运行

    BFG Repo-Cleaner 是由 Scala (一种JVM语言) 写成, 所以会被编译成 jar 包, 下载非常方便, 下载地址可在官网或直接点击 bfg 下载地址 .

    但因此运行 bfg.jar 就需要 Java 环境, 关于 Java 环境的安装, macOS可以参考 macOS 的 JDK 安装问题 , 而 Windows 已经有很多人提过, 不做赘述.

    让它完全消失

    首先需要自行从项目中删除不想要的文件并提交, 这样能最大程度避免误删、误操作.

    ## 首先需要自行从项目中删除不想要的文件
    rm file-to-delete
    
    ## 提交改动, 即最新分支是不包含要被删除的文件
    git commit -m "删除 file-to-delete"
    git push
    

    然后使用 --mirror 命令裸克隆(clone)整个项目.

    git clone --mirror git@github.com:username/some-project.git
    
    ## 根据经验, 如果是包含大文件的项目, 使用 ssh 将会克隆的非常缓慢, 可以改用 https
    git clone --mirror https://github.com/username/some-project.git
    
    ## 这个时候, 你的当前目录下就会产生一个名为 some-project.git 的文件夹
    

    接着开始删除文件历史.

    ## 根据情况的不同, bfg 可选择根据文件大小删除
    java -jar bfg.jar --strip-blobs-bigger-than 100M some-project.git
    
    ## 根据情况的不同, bfg 可选择直接根据名字删除
    java -jar bfg.jar --delete-files name-of-file  some-project.git
    

    任选以上命令执行其中一个后, 执行 git gc 真正删除这些文件并提交.

    cd some-project.git
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
    git push
    

    这时候那个文件就会消失了…

  • 相关阅读:
    vue中使用第三方UI库的移动端rem适配方案
    前端规范--eslint standard
    从上往下打印二叉树
    栈的压入,弹出序列
    随机森林
    LR
    顺时针打印矩阵
    包含min函数的栈
    树的子结构
    合并两个有序链表
  • 原文地址:https://www.cnblogs.com/imzhizi/p/delete-files-thoroughly-using-bfg.html
Copyright © 2020-2023  润新知