git - 从 git 历史记录中删除未使用的 Assets

标签 git git-filter-branch git-rewrite-history

所以,我整个上午都在寻找执行此操作的正确方法,但我不是那种精通命令行的人。

我有一个包含大量 Assets 的 git 存储库。这就像大罪,我知道。

repo 已经变得太大了。我想清理它,以便我可以通过编程方式从整个 repo 历史中删除 HEAD 中不再存在的所有文件。我已经看到了执行此操作的方法,您可以在其中指定文件路径,但实际上,我说的是从我们的最终产品中删除的 1000 多个文件,我真的不想再在我的 repo 中了。

更新: 我已经清理了所有不应该存在的 Assets 的 repo 协议(protocol)。我现在真的只有源代码和一些应该存在的 Assets 。我真的很想保留所有源代码的所有历史记录……所以我真的很想从历史记录中删除已删除的文件,同时保留当前存在的历史记录。这就是目标。我很确定可以使用 git filter-branch 来完成 - 但我只是不太了解它。

最佳答案

使用 BFG Repo-Cleaner ,一个更简单、更快速的 git-filter-branch 替代方案,专门用于从 Git 历史记录中删除不需要的文件。

so I can programmatically remove all files that do not exist in HEAD anymore from the entire history of the repo

默认情况下,BFG 会“保护”您的 HEAD 提交中的所有文件,但会删除符合您的条件的其他文件。

您应该仔细遵循 usage instructions ,但核心部分就是这样:

$ java -jar bfg.jar  --strip-blobs-bigger-than 1M  my-repo.git

任何大小超过 1MB 的文件 - 在你的最新提交中 - 将从你的 Git 存储库的历史记录中删除。如果您有普通的、小于 1MB 的源文件,您仍然想要删除,您可以使用 --delete-files- 指定它们-删除文件夹 选项。

BFG 通常至少为 10-50x比运行 git-filter-branch 更快,而且通常更易于使用。

完全披露:我是 BFG Repo-Cleaner 的作者。

关于git - 从 git 历史记录中删除未使用的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233093/

相关文章:

git - 从 git 存储库中删除文件(历史)

git - 如何在 GIT 上锁定 odt 文件?

Git 日志默认顺序标准

git - 在一系列提交上运行 filter-branch

git - 使 git `replace` 提交永久(或类似)

git - 如何撤消 git commit --amend

Git 别名,用于与 master 的最新版本重新 merge

git - 如何使用 git config 删除全局配置中的条目?

linux - 使用字符串的 sed 变量替换

git filter-branch 重复提交