BFG Repo-Cleaner

从Git历史记录中删除敏感文件及其提交

ⅰ亾dé卋堺 提交于 2020-03-12 17:21:50
我想在GitHub上放置一个Git项目,但它包含某些包含敏感数据的文件(用户名和密码,例如Capistrano的/config/deploy.rb)。 我知道我可以将这些文件名添加到 .gitignore ,但这不会删除它们在Git中的历史记录。 我也不想通过删除/.git目录重新开始。 有没有一种方法可以删除您Git历史记录中特定文件的 所有 痕迹? #1楼 更改密码是一个好主意,但是对于从存储库历史记录中删除密码的过程,我建议使用 BFG Repo-Cleaner ,它是 git-filter-branch 一种更快,更简单的替代方法,明确地设计用于从Git存储库中删除私有数据。 创建一个 private.txt 文件,列出要删除的密码等(每行一个),然后运行以下命令: $ java -jar bfg.jar --replace-text private.txt my-repo.git 存储库历史记录中所有阈值大小(默认为1MB以下)的文件都将被扫描,并且所有匹配的字符串(不在您的 最新 提交中)都将替换为字符串“ *** REMOVED ***”。 然后,您可以使用 git gc 清除失效的数据: $ git gc --prune=now --aggressive BFG通常比运行 git-filter-branch 快10至50倍,并且针对以下两种常见用例简化并定制了选项:

如何从Git存储库中的提交历史记录中删除/删除大文件?

亡梦爱人 提交于 2019-12-29 17:26:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有时,我将DVD-rip放入一个网站项目中,然后不小心 git commit -a -m ... ,然后,zap的回购膨胀了2.2个演出。 下次我进行一些编辑,删除视频文件并提交所有内容,但是压缩文件仍在历史记录中。 我知道我可以从这些提交开始分支,并将一个分支重新建立到另一个分支。 但是,我应该怎么做才能将2个提交合并在一起,以便大文件不显示在历史记录中,并在垃圾回收过程中清除? #1楼 请注意,此命令可能具有很大的破坏性。 如果更多的人在回购上工作,他们都将不得不拉新的树。 如果您的目标不是减小大小,则不需要三个中间命令。 由于filter分支会创建已删除文件的备份,因此可以在其中保留很长时间。 $ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch YOURFILENAME" HEAD $ rm -rf .git/refs/original/ $ git reflog expire --all $ git gc --aggressive --prune $ git push origin master --force #2楼 git filter-branch --tree-filter 'rm -f path/to

BFG Repo-Cleaner

与世无争的帅哥 提交于 2019-11-28 18:13:54
BFG Repo-Cleaner(快速清除Git提交历史中的特定文件) 有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必须更新或下载这些无用的文件,因此, 我们需要一个方法, 永久的删除这些文件(包括该文件的历史记录). BFG是用Scala写的,像 git-filter-branch 那样删除大的或麻烦的块,但是速度更快。 在GitHub上查看项目 $ bfg --strip-blobs-bigger-than 100M --replace-text banned.txt repo.git git-filter-branch的另一种选择 BFG是 git-filter-branch 之外的一种更简单、更快的方法,可以清除Git存储库历史中的不良数据: 删除 大文件 删除 密码 、 凭证 和其他 私人数据 git-filter-branch 命令非常强大,可以做BFG不能做的事情——但是BFG更适合上面的任务,因为: 快 : 快 10 - 720倍 简单 : BFG并不是特别聪明,但专注于让上述任务变得简单 优美 : 如果需要,可以使用漂亮的Scala语言定制BFG。这至少在某些时候比Bash脚本要好。 使用 首先使用 -