2020.03.06 | 零零碎碎 | 11571 浏览 | 14 赞 | 11 条评论


请注意,本文编写于 1682 天前,最后修改于 1682 天前,其中某些信息可能已经过时。
AI摘要:本文介绍了如何在Git/GitHub中删除敏感数据。首先,使用BFG工具替代git filter-branch命令,安装BFG和JRE。然后,将需要删除的文件在本地进行一次commit,接着运行BFG命令删除文件或文件夹。最后,使用force push将更改推送到远程仓库,并添加.gitignore以防止类似问题再次发生。

Powered by AISummary and MoonShot KimiChat.

今天整理之前的 GitHub 项目,发现自己的一个项目不小心把服务器密钥暴露出来了。幸好是个 private 的库。就着手准备把这个文件删除。

但是在 Git 里删文件似乎不是个容易的事情——由于 Git 会保留历史与版本回溯,所以需要将需要删除的文件在之前的版本中也一并删除掉w

据说正常来讲需要使用 git filter-branch 命令,但咱也不是 git 大佬,接触新命令也挺陌生的,而且据说这个命令一来繁琐,二来当需要修改的文件较大/较多时,执行时间堪忧。

好在有一个叫做 BFG 的工具,提供了一种更快、更简单的 git filter-branch 替代方法,用于删除不需要的数据。简单踩了一下坑,做了一下步骤记录。

1. 安装 BFG

BFG 的官网在 这里,下载地址在 这里

另外由于这个是用 java 写的,所以需要安装 JRE,下载地址在 这里不过开发者应该都有装吧...

2. 删除文件

需要先将需要删除的文件进行删除并在本地进行一次 commit,才能在 BFG 中对文件进行删除。否则会提示 These are your protected commits, and so their contents will NOT be altered 而无法彻底清除。

3. 运行 BFG

万事俱备,准备删除w

删除文件的命令:

java -jar bfg的路径/bfg-1.13.0.jar --delete-files 需要删除的文件

删除文件夹的命令:

java -jar bfg的路径/bfg-1.13.0.jar --delete-folders 需要删除的文件夹

4. commit 并 push 到远端

这里由于删除文件更改了之前的提交历史,所以必须 force push

git push --force

之后就可以去 GitHub 上检查一下文件是否删完了w

5. 添加 .gitignore

最后不要好了忘了伤疤忘了疼呦~ 记得把相关文件添加到 .gitignore 里w

用 Git 还是要谨慎一点哦

参考链接

本文链接:https://www.idealclover.top/archives/611/

本作品由 idealclover 采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。

标签: 服务器, 文件, git, 链接, 信息, 删除, 官网, 工具, push, jar

14

已有 11 条评论


  1. 夏目
    夏目 回复

    感觉原理应该就是这样:假如说要删除的文件x是在提交c_k引入的,而当前的最新提交是c_n,那么就在c_k创建一个新分支,把文件x删除,提交,我们假设这个新的提交叫做c_{k}^{prime},这个新的分支叫做b_2,然后把c_{k+1},c_{k+2},...,c{n}这些提交里面所有和文件x无关的变动,全部在分支b_2的c_{k}^{prime}提交的基础上重演(replay)一遍,由此一来就会得到不包含要删除的文件x,同时也包含了最新提交c_n到c_k的所有不包含要删除的文件x的变动.

    1. idealclover
      idealclover 回复

      对的,原理上应该是这样,所以才会去 force commit

    2. 夏目
      夏目 回复

      并且由于Git的提交记录的实际上是增量,所以易知在b_2这个分支,重演了去掉了文件x相关变动的c_{k+1}^{prime},...,c_{n}^{prime}得到的b_2分支的新提交c_{n+1},就相当于于加入c_k没有添加文件x的前提下当前的hypothetical c_{n}.

  2. Otstar Lin
    Otstar Lin 回复

    要是我估计会直接删库 ∠( ᐛ 」∠)_

    1. idealclover
      idealclover 回复

      主要是已经有了一些 commit 了,还是舍不得 XD

  3. Summer
    Summer 回复

    哈哈哈,HXD整了个大活。话说前两年也有过报道类似的,有程序员在commit代码的时候把公司生产环境的敏感信息给一并提交了,:)

    1. idealclover
      idealclover 回复

      噗哈哈哈哈我刚随便一搜就搜到了这个 如何看待大疆的服务器 key 在 Github 上泄露事件? XD

      GitHub 上不小心漏 private key 的情况感觉应该会不少 2333

      1. xtexChooser
        xtexChooser 回复

        你这个连接是到https://idealclover.top/archives/611/zhihu.com/question/68495272的啊,要不加个https?(,,´・ω・)ノ"(´ っ ω・`。)

        1. idealclover
          idealclover 回复

          忘加协议头了,现在应该ok了

  4. c0sMx
    c0sMx 回复

    你为什么这么可爱w

    1. idealclover
      idealclover 回复

      (其实是日常犯蠢 XD

🤔关于我
翠翠 idealclover
Product Manager @ByteDance
南京大学 2016 级本科生
了解更多
🏠关于博客
基于 Typecho 博客框架
使用个人的 clover clover 主题